判断给出的二叉树是否是一个二叉搜索树(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)
}