diff --git "a/\346\225\260\346\215\256\347\273\223\346\236\204\347\263\273\345\210\227/\344\272\214\345\217\211\346\220\234\347\264\242\346\240\221\346\223\215\344\275\234\351\233\206\351\224\246.md" "b/\346\225\260\346\215\256\347\273\223\346\236\204\347\263\273\345\210\227/\344\272\214\345\217\211\346\220\234\347\264\242\346\240\221\346\223\215\344\275\234\351\233\206\351\224\246.md" index 57c9ec08e472ad98c38b82de87daba8d58132395..00ef773e6e5d7d7d4dfba6436b35271b1904be18 100644 --- "a/\346\225\260\346\215\256\347\273\223\346\236\204\347\263\273\345\210\227/\344\272\214\345\217\211\346\220\234\347\264\242\346\240\221\346\223\215\344\275\234\351\233\206\351\224\246.md" +++ "b/\346\225\260\346\215\256\347\273\223\346\236\204\347\263\273\345\210\227/\344\272\214\345\217\211\346\220\234\347\264\242\346\240\221\346\223\215\344\275\234\351\233\206\351\224\246.md" @@ -121,7 +121,6 @@ boolean isValidBST(TreeNode root, TreeNode min, TreeNode max) { } ``` - **一、在 BST 中查找一个数是否存在** 根据我们的指导思想,可以这样写代码: @@ -499,6 +498,30 @@ class Solution: return node ``` +### java +``` +/** +* 第【98】题的扩展解法: +* 对于BST,有一个重要的性质,即“BST的中序遍历是单调递增的”。抓住这个性质,我们可以通过中序遍历来判断该二叉树是不是BST。 +* 我们定义preNode节点表示上一个遍历的节点,在中序遍历的时候,比较当前节点和preNode节点的大小,一旦有节点小于或等于前一个节点,则不满足BST的规则,直接返回false,否则遍历结束,返回true。 +*/ +TreeNode preNode = null; +public boolean isValidBST(TreeNode root) { + if (root == null) return true; + + boolean leftRes = isValidBST(root.left); + + if (preNode != null && root.val <= preNode.val) { + return false; + } + preNode = root; + + boolean rightRes = isValidBST(root.right); + + return leftRes && rightRes; +} +``` + ### javascript @@ -695,4 +718,3 @@ var deleteNode = function(root, key) { } }; ``` -