Go語言程式檢查二叉樹是否為二叉搜尋樹


二叉樹最多有兩個子節點,而二叉搜尋樹則要求樹的左側元素小於右側元素。在本文中,我們將編寫 Go 語言程式來檢查二叉樹是否為二叉搜尋樹。我們將使用不同的示例來更好地理解這個概念。

演算法

  • 步驟 1 − 建立一個 Node 結構體,包含三個欄位:節點資料(型別為 int),左子樹節點(型別為 Node)和右子樹節點(型別為 Node)。

  • 步驟 2 − 建立一個名為 is_valid_bstNode 的函式,該函式接受節點、最小元素和最大元素作為引數,並返回一個布林值。

  • 步驟 3 − 如果節點為空,則函式返回 true。

  • 步驟 4 − 如果節點的值小於最小元素或大於最大元素,則返回 false。

  • 步驟 5 − 如果上述條件都不滿足,則函式將遞迴檢查左右子樹,以確保它們都是二叉搜尋樹。

  • 步驟 6 − 在此步驟中,建立一個名為 isBinary_search_tree 的函式,該函式以根節點作為輸入元素。

  • 步驟 7 − 如果根節點為空,則返回 true;否則,呼叫 is_valid_bstNode 函式,並將根節點、負無窮大和正無窮大作為輸入。

  • 步驟 8 − 在 main 函式中,使用樹的左節點和右節點建立一個樹,並呼叫 isBinary_search_tree 函式,並將根節點作為引數。

  • 步驟 9 − 如果輸出為 true,則二叉樹是二叉搜尋樹,否則不是。

示例

在這個例子中,bstNode() 函式將用於比較節點元素與最大和最小元素,而 isBinary_search_tree 函式將透過呼叫 bstNode 函式來確定樹是否為二叉搜尋樹。

package main

import (
   "fmt"
)

type Node struct {
   num   int
   Left  *Node
   Right *Node
}

func is_valid_bstNode(node *Node, min int, max int) bool {
   if node == nil {
      return true
   }
   if node.num<= min || node.num>= max {
      return false
   }
   return is_valid_bstNode(node.Left, min, node.num) &&is_valid_bstNode(node.Right, node.num, max)
}

func isBinary_search_tree(root *Node) bool {
   if root == nil {
      return true
   }
   return is_valid_bstNode(root, -999999, 999999)
}

func main() {
	
   root := &Node{num: 40}
   root.Left = &Node{num: 20}
   root.Right = &Node{num: 50}
   root.Left.Left = &Node{num: 10}
   root.Left.Right = &Node{num: 30}

   if isBinary_search_tree(root) {
      fmt.Println("The binary tree is a binary search tree")
   } else {
      fmt.Println("The binary tree is not a binary search tree")
   }
}

輸出

The binary tree is a binary search tree

結論

在本文中,我們瞭解瞭如何使用示例執行檢查二叉樹是否為二叉搜尋樹的程式。在這個示例中,我們建立了兩個函式:isBinary_search_tree 用於檢查樹是否為二叉搜尋樹,以及 is_valid_bstNode 用於檢查節點是否為有效的二叉搜尋樹節點。

更新於: 2023年7月20日

305 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

立即開始
廣告