题解 | #判断一棵二叉树是否为搜索二叉树和完全二叉树#

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

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

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param root TreeNode类 the root
     * @return bool布尔型一维数组
     */
    public boolean[] judgeIt (TreeNode root) {
        // write code here
        boolean[] ret = new boolean[2];
        boolean search = isSearchTree(root);
        boolean level = isLevel(root);
        ret[0] = search;
        ret[1] = level;
        return ret;
    }
    
     // 层序遍历
    private boolean isLevel(TreeNode root) {
         if (root == null) {
            return true;
        }
        LinkedList<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        while (!queue.isEmpty()) {
            int size = queue.size();
            int m = 0;
            for (int i = 0; i < size; i++) {
                TreeNode node = queue.poll();
                if (node == null) {
                    m++;
                }
                if (m == size) {
                    return true;
                }
                if (node == null && queue.peek() != null) {
                    return false;
                }

                if (node != null) {
                    queue.offer(node.left);
                    queue.offer(node.right);
                } else {
                    queue.offer(null);
                    queue.offer(null);
                }
            }
        }
        return true;
    }
    
    int last = -1;

    // 中序遍历,如果是二叉搜索树,则是升序。
    private boolean isSearchTree(TreeNode root) {
        if (root == null) {
            return true;
        }
        boolean left = isSearchTree(root.left);
        if (last >= root.val) {
            return false;
        }
        last = root.val;
        boolean right = isSearchTree(root.right);
        return left && right;
    }
}
全部评论

相关推荐

找工作勤劳小蜜蜂:自我描述部分太差,完全看不出想从事什么行业什么岗位,也看不出想在哪个地区发展,这样 会让HR很犹豫,从而把你简历否决掉。现在企业都很注重员工稳定性和专注性,特别对于热爱本行业的员工。 你实习的工作又太传统的it开发(老旧),这部分公司已经趋于被淘汰,新兴的互联网服务业,比如物流,电商,新传媒,游戏开发和传统的It开发有天然区别。不是说传统It开发不行,而是就业岗位太少,基本趋于饱和,很多老骨头还能坚持,不需要新血液。 工作区域(比如长三角,珠三角,成渝)等也是HR考虑的因素之一,也是要你有个坚定的决心。否则去几天,人跑了,HR会被用人单位骂死。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
正在热议
更多
# 长得好看会提高面试通过率吗? #
5578次浏览 54人参与
# 百度工作体验 #
316398次浏览 2233人参与
# MiniMax求职进展汇总 #
25585次浏览 323人参与
# 沪漂/北漂你觉得哪个更苦? #
1926次浏览 46人参与
# 离家近房租贵VS离家远但房租低,怎么选 #
16967次浏览 137人参与
# 春招至今,你的战绩如何? #
17075次浏览 154人参与
# 巨人网络春招 #
11609次浏览 232人参与
# 你的实习产出是真实的还是包装的? #
3726次浏览 61人参与
# HR最不可信的一句话是__ #
1230次浏览 34人参与
# AI面会问哪些问题? #
1128次浏览 30人参与
# 你做过最难的笔试是哪家公司 #
1486次浏览 24人参与
# AI时代,哪个岗位还有“活路” #
3206次浏览 56人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
153013次浏览 889人参与
# 简历第一个项目做什么 #
32303次浏览 374人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
8085次浏览 44人参与
# 简历中的项目经历要怎么写? #
311420次浏览 4290人参与
# XX请雇我工作 #
51172次浏览 172人参与
# 投格力的你,拿到offer了吗? #
178477次浏览 891人参与
# 你最满意的offer薪资是哪家公司? #
77061次浏览 375人参与
# AI时代,哪些岗位最容易被淘汰 #
65158次浏览 923人参与
# 秋招白月光 #
731903次浏览 5441人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187733次浏览 1123人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务