BST考察中序遍历,完全二叉树考察层次遍历第一个空节点之后节点的情况

判断一棵二叉树是否为搜索二叉树和完全二叉树

http://www.nowcoder.com/questionTerminal/f31fc6d3caf24e7f8b4deb5cd9b5fa97

BST中序遍历有有序的,这是充要条件。---保存前一个节点:成员变量pre

    private TreeNode pre;
    public boolean isBst(TreeNode root){
        if(root==null){
            return true;
        }
        if(!isBst(root.left)){
            return false;
        }
        if(pre!=null&&pre.val>=root.val){
            return false;
        }
        //保存前一个节点
        pre=root;
        if(!isBst(root.right)){
            return false;
        }

        return true;

    }

完全二叉树,层次遍历遇到第一个空节点后,剩余节点还有非空,则一定不是.巧用continue并配合标志位。

    /**
     * 验证是否为完全二叉树
     * @param root 树
     * @return  验证是否为完全二叉树
     */
    public boolean isCompleteTree(TreeNode root) {
        if(root==null){
            return true;
        }
        Queue<TreeNode> queue=new LinkedList<>();
        queue.add(root);
        TreeNode cur;
        boolean notComplete=false;
        while (!queue.isEmpty()){
            cur=queue.remove();
            if(cur==null){
                notComplete=true;
                //第一个空节点之后的节点,countinue使用的很妙
                continue;
            }
            if(notComplete){
                return false;
            }
            queue.add(cur.left);
            queue.add(cur.right);
        }
        return true;

    }

最后答案依次调用以上两个函数OK。注意返回数组时前面有new boolean[]

    public boolean[] judgeIt (TreeNode root) {

        return new boolean[]{isBst(root), isCompleteTree(root)};
    }
全部评论

相关推荐

尊嘟假嘟点击就送:加v细说,问题很大
点赞 评论 收藏
分享
小谷围鸡肉卷阿姨:+1,腾子投完一动不动
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务