简单递归加判断

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

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

进行中序遍历,如果有序则为二叉搜索树,在中序遍历的同时计算叶子节点的个数。list的长度为树中节点的个数,通过公式:如果为完全二叉树则——如果总节点的个数(len)为奇数,叶子节点的个数为(len+1)/2,如果为偶数,则叶子节点的个数为len/2,判断是否为一颗完全二叉树。

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布尔型一维数组
     */
    List<Integer> list = new ArrayList<>();
    int treeLen = 0;
    public boolean[] judgeIt (TreeNode root) {
        boolean[] flag = new boolean[2];
        // write code here
        if (root == null)
            return flag;
        helper(root);
        int len = list.size();
        int tmp = (len % 2 == 1 ? (len+1)/2 : len / 2); 
        if (tmp == treeLen)
            flag[1] = true;
        for (int i = 1; i < len; i++)
        {
            if (list.get(i) < list.get(i-1))
            {
                return flag;
            }
        }
        flag[0] = true;
        return flag;
    }

    public void helper(TreeNode root)
    {
        if (root == null)
            return ;
        if (root.left == null && root.right == null)
            treeLen++;
        helper(root.left);
        list.add(root.val);
        helper(root.right);
    }
}
全部评论
完全二叉树的判断错了。简单的例子,一个根节点和右孩子的二叉树,两个节点,一个叶子节点,但不是完全二叉树!
点赞 回复 分享
发布于 2021-07-07 11:56
应该不对。。完全二叉树不光要考虑叶子节点和总结点的数量关系,还要考虑叶子节点的位置
点赞 回复 分享
发布于 2021-05-06 18:02
是不是不能通过叶子节点个数判断完全二叉树啊
点赞 回复 分享
发布于 2021-03-20 11:47
9/10 组用例通过
点赞 回复 分享
发布于 2021-03-19 14:48
你好,代码能通过吗?
点赞 回复 分享
发布于 2021-03-14 17:25

相关推荐

认真搞学习:这么良心的老板真少见
点赞 评论 收藏
分享
湫湫湫不会java:写的很杂,连自己都不知道找什么工作的感觉,只是要份工作。针对自己稍微有点优势的方向好好整份简历投投吧,然后这杂的简历就辅助投投,因为自己认为的优势可能也不是很大的优势all in可能失业,自己也没有啥很想的方向还是可以用这通用的碰碰运气吧,加油
点赞 评论 收藏
分享
06-25 16:53
门头沟学院 Java
人力小鱼姐:简历可以直接用飞书模板 模拟面试可以试试ai,现在好多都还是免费阶段 像Sugar云面、多面鹅都不错,主要看面试后自己能不能复盘出有效信息
为了找工作你花了哪些钱?
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务