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 次瀏覽

開啟您的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.