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 次浏览

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告