98. Validate Binary Search Tree
Given a binary tree, determine if it is a valid binary search tree (BST).
Assume a BST is defined as follows:
- The left subtree of a node contains only nodes with keys less than the node's key.
- The right subtree of a node contains only nodes with keys greater than the node's key.
- Both the left and right subtrees must also be binary search trees.
Example 1:
2 / \ 1 3
Binary tree [2,1,3]
, return true.
Example 2:
1 / \ 2 3
Binary tree [1,2,3]
, return false.
本题采用的方法是迭代的先序遍历检验法,因为起点变成了从最左节点开始,所以可以当作没有左节点,只要比较其父节点和父节点的右子树节点大小即可,stack用来存储其父节点。代码如下:
1 /** 2 * Definition for a binary tree node. 3 * public class TreeNode { 4 * int val; 5 * TreeNode left; 6 * TreeNode right; 7 * TreeNode(int x) { val = x; } 8 * } 9 */ 10 public class Solution { 11 public boolean isValidBST(TreeNode root) { 12 TreeNode node = root; 13 Stack<TreeNode> stack = new Stack<TreeNode>(); 14 TreeNode pre = null; 15 while(node!=null||!stack.isEmpty()){ 16 while(node!=null){ 17 stack.push(node); 18 node = node.left; 19 } 20 node = stack.pop(); 21 if(pre!=null&&pre.val>=node.val) return false; 22 pre = node; 23 node = node.right; 24 } 25 return true; 26 } 27 }