广搜
class Solution {
public boolean isCompleteTree(TreeNode root) {
int num = 0;
Deque<ANode> queue = new LinkedList<>();
queue.offer(new ANode(root, 1));
int val = 0;
while (!queue.isEmpty()) {
ANode anode = queue.poll();
val = anode.code;
num++;
if(anode.node.left != null) {
queue.offer(new ANode(anode.node.left, val * 2));
}
if(anode.node.right != null) {
queue.offer(new ANode(anode.node.right, val * 2 + 1));
}
}
return val == num;
}
}
class ANode { // Annotated Node
TreeNode node;
int code;
ANode(TreeNode node, int code) {
this.node = node;
this.code = code;
}
}
深搜
// 冲刺049
class Solution {
int maxNum;
int cnt;
public boolean isCompleteTree(TreeNode root) {
if (dfs(root, 1) == false) {
return false;
}
return maxNum == cnt;
}
boolean dfs(TreeNode node, int num) {
if (node == null) {
return true;
}
cnt++;
maxNum = Math.max(maxNum, num);
return dfs(node.left, 2 * num) && dfs(node.right, 2 * num + 1);
}
}

这篇博客介绍了两种树的遍历方法:广度优先搜索(BFS)和深度优先搜索(DFS)。通过Java代码展示了如何判断一棵二叉树是否为完全二叉树。在BFS中,使用队列进行节点的访问;而在DFS中,采用递归方式遍历树的节点。最后,博客讨论了这两种方法在判断完全二叉树时的应用和区别。
2226

被折叠的 条评论
为什么被折叠?



