题解 | #判断是不是完全二叉树#

判断是不是完全二叉树

https://www.nowcoder.com/practice/8daa4dff9e36409abba2adbe413d6fae

思路

利用完全二叉树的特性递归的判断每棵子树是否符合完全二叉树的定义

或者也可以利用层序遍历的思想,在对传入二叉树进行层序遍历的同时,将值加入集合,当遇到某个节点有空节点时,加入占位元素到集合进行标记,每层遍历完,对集合进行遍历,如果占位元素是连续且后续没有元素值,说明该层符合完全二叉树的定义

代码

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
    * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
    *
    * @param root TreeNode类
    * @return bool布尔型
    */
    public boolean isCompleteTree(TreeNode root) {
        // 空树属于完全二叉树
        if (root == null) {
            return true;
        }
        return judgment(root);
    }

    /**
     * 传入二叉树。判断该树是否为完全二叉树
     *
     * @param root 根节点
     * @return boolean 判断结果
     * @apiNote
     * @since 2023/1/3 13:52
     */
    public boolean judgment(TreeNode root) {
        // 对根节点进行判断
        // 如果该节点不存在左子节点,但存在右子节点,说明不是完全二叉树
        if (root.right != null && root.left == null) {
            return false;
        }
        // 如果该节点存在左子节点,但不存在右子节点,我们需要判断该左子节点是否为叶子节点
        else if (root.left != null && root.right == null) {
            if (root.left.left != null || root.left.right != null) {
                return false;
            }
        }
        // 如果该节点左右子树均存在,需要判断左子树是否为叶子节点,如果是需要判断右子树是否为叶子节点
        else if (root.left != null) {
            if (root.left.left == null || root.left.right == null) {
                if (root.right.left != null || root.right.right != null) {
                    return false;
                }
            }
        }
        // 递归的调用方法,判断左右子树是否满足条件
        if (root.left != null) {
            if (!judgment(root.left)) {
                return false;
            }
        }
        if (root.right != null) {
            return judgment(root.right);
        }
        return true;
    }
}
全部评论

相关推荐

菜菜咪:1. 可以使用简历网站的模版,美观度会更好一点 2. 邮箱可以重新申请一个,或者用qq邮箱的别名,部分hr可能会不喜欢数字邮箱 3. 项目经历最好分点描述,类似的项目很多,可以参考一下别人怎么写的 4. 自我评价可加可不加,技术岗更看重技术。最后,加油,优秀士兵
点赞 评论 收藏
分享
我已成为0offer的糕手:别惯着,胆子都是练出来的,这里认怂了,那以后被裁应届被拖工资还敢抗争?
点赞 评论 收藏
分享
11-28 17:58
门头沟学院 Java
美团 JAVA开发 n×15.5
牛客786276759号:百度现在晋升很难的 而且云这块的业务没美团好 你看百度股价都跌成啥样了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务