98. Validate Binary Search Tree

来源:互联网 发布:梦想成真软件系统 编辑:程序博客网 时间:2024/06/06 00:26

首先根节点必须大于左节点,小于右节点,重点在于根节点小于(右子节点的最左节点)&&根节点大于(左节点的最右节点)

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public boolean isValidBST(TreeNode root) {        return dfs(root);    }    private boolean dfs(TreeNode root){        if(root==null)return true;        //if(root.right==null&&root.left==null)return true;        if(root.right!=null){if(root.val>=root.right.val)return false;}        if(root.left!=null){if(root.val<=root.left.val)return false;}        if(root.left!=null&&root.val<=dfsRight(root.left))return false;        if(root.right!=null&&root.val>=dfsLeft(root.right))return false;        return dfs(root.left)&&dfs(root.right);    }    private int dfsRight(TreeNode root){//递归找节点的最右子节点        if(root.right!=null)return dfsRight(root.right);        else{return root.val;}    }    private int dfsLeft(TreeNode root){//递归找节点的最左子节点        if(root.left!=null)return dfsLeft(root.left);        else{return root.val;}    }}
0 0