实现一个函数,检查一棵二叉树是否为二叉搜索树。
示例 1:
输入:
2
/ \
1 3
输出: true
示例 2:
输入:
5
/ \
1 4
/ \
3 6
输出: false
解释: 输入为: [5,1,4,null,null,3,6]。
根节点的值为 5 ,但是其右子节点值为 4 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/legal-binary-search-tree-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
中序遍历,判断大小。
func isValidBST(root *TreeNode) bool {
if root == nil || (root.Left == nil && root.Right == nil) {
return true
}
flag := true
last := make([]int,0)
run(root,&last,&flag)
return flag
}
func run(root *TreeNode,last *[]int,flag *bool) {
if *flag == false {
return
}
if root == nil {
return
}
run(root.Left,last,flag)
if len(*last) == 0 {
*last = append(*last,root.Val)
} else {
if root.Val <= (*last)[len(*last)-1] {
*flag = false
return
} else {
*last = append(*last,root.Val)
}
}
run(root.Right,last,flag)
}