数据结构—判断一棵二叉树是否是完全二叉树(java)

2023-11-09

判断一棵二叉树是否是完全二叉树
一,完全二叉树的三种节点
完全二叉树有右树必有左树,,节点编号和满二叉树一一对应
1,度为2的节点有n个
2,度为1的节点只能有1个
3,度为0的节点有n个
二,具体思路
1,分两个阶段,第一阶段所有节点都有左树右树,当遇到节点只有左树,或是没有子树切换第二阶段
2,该阶段所有节点权全为叶子节点,遇到一个节点有子树就不是完全二叉树
3,使用层序遍历,借用队列求解
三,代码实现

public class IsCompleteTree {
    public boolean isCompleteTree(TreeNode root) {
        if (root == null) {
            return true;
        }
        //层序
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        //引入标志位
        boolean flag = false;
        while (!queue.isEmpty()) {
            //cur表示当前访问节点
            TreeNode cur = queue.poll();
            if (!flag) {
                if (cur.left != null && cur.right != null) {
                    //当前在第一阶段
                    queue.offer(cur.left);
                    queue.offer(cur.right);
                } else if (cur.right != null && cur.left == null) {
                    // 此时只有右树没有左树,反例
                    return false;
                } else if (cur.left != null && cur.right == null) {
                    //切换状态
                    // 只有左树没有右树,此时cur是碰到的第一个只有左树的节点
                    flag = true;
                    queue.offer(cur.left);
                } else {
                    // 此时左树和右树全部为空,cur第一个碰到的叶子节
                    flag = true;
                }
            }else{
                // 此时处在第二阶段,第二阶段中的所有节点不可能有子树
                // 有一个反例就false
                if (cur.left != null || cur.right != null) {
                    return false;
                }
            }
        }
        return true;
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构—判断一棵二叉树是否是完全二叉树(java) 的相关文章

随机推荐