美文网首页
LeetCode 第 958 题:二叉树的完全性检验

LeetCode 第 958 题:二叉树的完全性检验

作者: 放开那个BUG | 来源:发表于2021-08-05 23:12 被阅读0次

1、前言

题目描述

2、思路

这道题的思路在于,一个完全二叉树,针对一个节点,它的序号为 i,那么它的左右节点的序号分别为 2 * i 和 2 * i + 1。我们针对二叉树使用层序遍历并记录每个节点的序号,我们发现所有节点序号都是生序排列,且中间没有间隙。所以走到了最后一个节点,我们只需要取出它的序号,比较它是否与节点数相等。因为一个完全二叉树的序号等于节点数,如果不能,那么就不满足要求。

3、代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {

    class ATreeNode{
        TreeNode root;
        int code = 0;

        public ATreeNode(TreeNode root, int code){
            this.root = root;
            this.code = code;
        }
    }

    public boolean isCompleteTree(TreeNode root) {
        List<ATreeNode> list = new ArrayList<>();
        list.add(new ATreeNode(root, 1));
        int i = 0;

        while(i < list.size()){
            ATreeNode node = list.get(i++);
            if(node.root != null){
                list.add(new ATreeNode(node.root.left, 2 * node.code));
                list.add(new ATreeNode(node.root.right, 2 * node.code + 1));
            }
        }

        return list.get(i - 1).code == list.size();
    }
}

相关文章

网友评论

      本文标题:LeetCode 第 958 题:二叉树的完全性检验

      本文链接:https://www.haomeiwen.com/subject/morxultx.html