写道
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.
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.
解题思路 : 利用BST中序遍历是排好序的!
第一次做的时候思路错了,以为只要遍历的时候,加一个条件判断是否左右节点满足条件!
那样的话,就可能存在根节点的右边小于它的节点或左边大于他的节点;
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public boolean isValidBST(TreeNode root) {
List<Integer> nodes = new ArrayList<Integer> ();
return validateBST(root,nodes);
}
boolean validateBST(TreeNode root,List<Integer> nodes ) {
if (root == null) return true;
if (!validateBST(root.left,nodes))
return false;
int val = root.val;
if (nodes.isEmpty()) nodes.add(val);
else if (nodes.get(nodes.size() - 1) >= val) {
return false;
} {
nodes.add(val);
}
if (!validateBST(root.right,nodes))
return false;
return true;
}
}