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();
}
}
网友评论