频道栏目
首页 > 资讯 > 其他 > 正文

Validate Binary Search Tree:一棵树是否是二叉搜索树的检验

17-12-11        来源:[db:作者]  
收藏   我要投稿

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 keysless thanthe node's key.

The right subtree of a node contains only nodes with keysgreater thanthe 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.

思路:二叉搜索树是当前节点比左子树所有节点大且比右子树所有节点小!!!不是比左节点和右节点!!!这点容易写错。

有递归深度优先遍历或者非递归都可以。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public boolean isValidBST(TreeNode root) {
        if(root == null) return true;
        Stack stack = new Stack<>();
        TreeNode pre = null;
        while(root!=null||!stack.isEmpty()){
            while(root!=null){
                stack.push(root);
                root = root.left;
            }
            root = stack.pop();
            if(pre!=null&&pre.val >= root.val) return false;
            pre = root;
            root = root.right;            
        }
        return true;
    }
}
或者
public class Solution {
    public boolean isValidBST(TreeNode root) {
        return isValidBST(root, Long.MIN_VALUE, Long.MAX_VALUE);
    }
    
    public boolean isValidBST(TreeNode root, long minVal, long maxVal) {
        if (root == null) return true;
        if (root.val >= maxVal || root.val <= minVal) return false;
        return isValidBST(root.left, minVal, root.val) && isValidBST(root.right, root.val, maxVal);
    }
}
相关TAG标签
上一篇:创建无jar包的简单java项目教程
下一篇:表单传输后台乱码是什么原因?表单数据获取方法中get/post区别解析
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站