Go语言程序:打印二叉树的高度
二叉树最多有两个子节点,高度指的是树的层数。本文将通过两个例子来查找二叉树的高度。在这篇 Go 语言文章中,我们将编写程序来打印二叉树的高度。
语法
func append(slice, element_1, element_2…, element_N) []T
append 函数用于向数组切片添加值。它接受多个参数。第一个参数是要向其添加值的数组,后跟要添加的值。然后,该函数返回包含所有值的最终数组切片。
funclen(v Type) int
len() 函数用于获取任何参数的长度。它接受一个参数作为要查找其长度的数据类型变量,并返回一个整数,该整数是变量的长度。
算法
步骤 1 − 创建一个 Node 结构体,并在该结构体中创建三个字段:left 和 right(类型为 node)以及 data(类型为 int)。
步骤 2 − 创建一个函数 get_height,其参数为根节点。
步骤 3 − 在函数中,检查根节点是否为空,如果是,则返回 0。
步骤 4 − 如果条件不成立,则使用 root.left 递归查找左子树的高度。
步骤 5 − 同样,使用 root.right 递归查找右子树的高度。
步骤 6 − 然后,使用 if 条件检查左高度是否大于右高度,如果是,则返回左高度 + 1(其中 1 代表根元素)。
步骤 7 − 但是,如果左高度小于右高度,则返回右高度 + 1。
步骤 8 − 在 main 函数中,通过设置左子树和右子树中的数据来创建一个树。
步骤 9 − 调用 get_height 函数,并传入 root 作为输入参数来计算树的高度。
示例 1
在这个例子中,将递归调用左子树和右子树来计算树的高度。树将被创建,数据将被设置在左子树和右子树中。
package main import "fmt" type Node struct { data int left *Node right *Node } func get_height(root *Node) int { if root == nil { return 0 } else { left_height := get_height(root.left) right_height := get_height(root.right) if left_height>right_height { return left_height + 1 } else { return right_height + 1 } } } func main() { root := &Node{ data: 10, left: &Node{ data: 20, left: &Node{ data: 40, left: nil, right: nil, }, right: &Node{ data: 50, left: nil, right: nil, }, }, right: &Node{ data: 30, left: nil, right: nil, }, } fmt.Println("Height of the binary tree is:", get_height(root)) }
输出
Height of the binary tree is: 3
示例 2
在这个例子中,将使用队列来添加树当前层级的节点,即左子树和右子树。然后,这些节点将被出队,并返回树的高度。
package main import "fmt" type Node struct { data int left *Node right *Node } func get_height(root *Node) int { if root == nil { return 0 } var v []*Node var level_size int height := 0 v = append(v, root) for len(v) > 0 { level_size = len(v) height++ for i := 0; i<level_size; i++ { node := v[0] v = v[1:] if node.left != nil { v = append(v, node.left) } if node.right != nil { v = append(v, node.right) } } } return height } func main() { root := &Node{ data: 10, left: &Node{ data: 20, left: &Node{ data: 40, left: nil, right: nil, }, right: &Node{ data: 50, left: nil, right: nil, }, }, right: &Node{ data: 30, left: nil, right: nil, }, } fmt.Println("Height of the binary tree is:", get_height(root)) }
输出
Height of the binary tree is: 3
结论
在这篇文章中,我们研究了如何使用两个例子来执行打印二叉树高度的程序。在第一个例子中,我们递归调用左子树和右子树来计算树的高度;在第二个例子中,我们使用队列来计算高度。