package wanQuanShu;
import java.util.LinkedList;
import java.util.Queue;
//1.判断一棵树是否是完全二叉树
class TreeNode {
public int val;
public TreeNode left;
public TreeNode right;
public TreeNode(int val) {
this.val = val;
}
}
public class InterviewTree {
public boolean isCompleteTree(TreeNode root) {
if (root == null) {
return true;
}
boolean isSecondStep = false;
//针对这个数进行层序遍历
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()) {
TreeNode cur = queue.poll();
//针对当前节点进行访问(判断是否符合完全二叉树的要求)
if (!isSecondStep) {
//这是第一阶段
if (cur.left != null && cur.right != null) {
//直接把这两个子树入队列
queue.offer(cur.left);
queue.offer(cur.right);
}
else if (cur.left == null && cur.right !=null) {
//当前第一阶段中某个节点只有右子树,没有左子树。一定不是完全二叉树
return false;
}
else if (cur.left != null && cur.right == null) {
//进入第二阶段
isSecondStep = true;
queue.offer(cur.left);
}
}
else {
//第二阶段
//要求第二阶段中任何一个节点都必须没有子树
//只要找到某个节点带子树,就说明找到了反例
if (cur.left != null || cur.right != null) {
return false;
}
}
}
//整个数都遍历完了,也没找到反例,最终就return true。认为就是完全二叉树。
return true;
}
}
leetcode-判断一棵树是否是完全二叉树
最新推荐文章于 2022-03-26 23:59:36 发布