判断给出的二叉树是否是一个二叉搜索树(BST)
二叉搜索树的定义如下
- 一个节点的左子树上节点的值都小于自身的节点值
- 一个节点的右子树上节点的值都大于自身的节点值
- 所有节点的左右子树都必须是二叉搜索树
如果你不清楚“{1,#,2,3}"的含义的话,请继续阅读
我们用如下方法将二叉树序列化:
二叉树的序列化遵循层序遍历的原则,”#“代表该位置是一条路径的终结,下面不再存在结点。
例如:
1 / \ 2 3 / 4 \ 5
上述的二叉树序列化的结果是:"{1,2,3,#,#,4,#,#,5}".
思路:中序遍历之后是有序数组呗,每一个都要比前一个小,保证是整体有序的。
package main
import . "nc_tools"
/*
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
/**
*
* @param root TreeNode类
* @return bool布尔型
*/
var pre *TreeNode
var flag = true
func isValidBST(root *TreeNode) bool {
// write code here
if root == nil {
return true
}
inOrder(root)
return flag
}
func inOrder(root *TreeNode) {
if root == nil {
return
}
inOrder(root.Left)
if pre != nil && root.Val <= pre.Val {
flag = false
}
pre = root
inOrder(root.Right)
}
这篇博客讨论了如何验证一个给定的二叉树是否符合二叉搜索树的特性。通过中序遍历,确保每个节点的值都满足左子树小于自身,右子树大于自身,并且递归检查所有子树。代码实现了一个`isValidBST`函数,配合辅助的`inOrder`函数完成遍历和验证。
1008

被折叠的 条评论
为什么被折叠?



