给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
节点的左子树只包含 小于 当前节点的数。
节点的右子树只包含 大于 当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
分析:这道题一开始的想法是比较每个节点的左右子树,看是否满足二叉搜索树的条件,但是结果是错了,因为右子树的左子树有可能比这个节点要大,但是这种方法无法判别出来。
看到二叉搜索树的题,第一时间要想到中序遍历,通过中序遍历,可以制造出一个递增的链表!!!
参考代码:
public boolean isValidBST(TreeNode root) {
sup(root);
int pre=path.get(0);
for(int i=1;i
if(tmp<=pre) return false;
pre=tmp;
}
return true;
}
LinkedList
private void sup(TreeNode node){
if(node==null) return;
sup(node.left);
path.add(node.val);
sup(node.right);
}
