简单递归加判断

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

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-03-14 17:25
9/10 组用例通过
点赞
送花
回复
分享
发布于 2021-03-19 14:48
滴滴
校招火热招聘中
官网直投
是不是不能通过叶子节点个数判断完全二叉树啊
点赞
送花
回复
分享
发布于 2021-03-20 11:47
应该不对。。完全二叉树不光要考虑叶子节点和总结点的数量关系,还要考虑叶子节点的位置
点赞
送花
回复
分享
发布于 2021-05-06 18:02
完全二叉树的判断错了。简单的例子,一个根节点和右孩子的二叉树,两个节点,一个叶子节点,但不是完全二叉树!
点赞
送花
回复
分享
发布于 2021-07-07 11:56

相关推荐

投递腾讯等公司8个岗位
点赞 评论 收藏
转发
1 收藏 评论
分享
牛客网
牛客企业服务