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

结论

在这篇文章中,我们研究了如何使用两个例子来执行打印二叉树高度的程序。在第一个例子中,我们递归调用左子树和右子树来计算树的高度;在第二个例子中,我们使用队列来计算高度。

更新于:2023年7月20日

238 次浏览

开启您的职业生涯

通过完成课程获得认证

开始学习
广告