目录
一.判断二叉树是否为完全二叉树
题目:
分析:
二叉树满足构成完全二叉树的条件如上图所示
1.可以创建一个队列,先将不为空的根结点放入队列中。
2.在队列不为空的情况下,将队头元素弹出并用cur接受,在cur不为空的情况下将cur的左右子树放入队列当中;cur为空则结束所有循环。
3.此时判断队列当中剩余的元素是否全为空,为空则次二叉树为完全二叉树,否则不为完全二叉树。
代码:
import java.util.*;
public boolean isCompleteTree (TreeNode root) {
// write code here
if (root == null) return false;
Queue<TreeNode> queue = new LinkedList<>();
TreeNode cur = null;
queue.offer(root);
while (!queue.isEmpty()) {
cur = queue.poll();
if (cur != null) {
queue.offer(cur.left);
queue.offer(cur.right);
} else {
break;
}
}
while (!queue.isEmpty()) {
TreeNode ret = queue.peek();
if (ret != null) {
return false;
}
queue.poll();
}
return true;
}
二.二叉树的层序遍历
题目:
分析:
1.由题目可分析得:返回值为存放了整型的List的List。
2.创建一个队列用于存放二叉树每一层的元素,同样先将不为空的root放入队列当中。
3. 在队列不为空的情况下,确定此时队列当中的元素个数,利用循环将队列当中所有的元素放入存放Integer类型的list当中。还需将cur不为空的左右子树放入队列当中。
代码:
import java.util.*;
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> ret = new ArrayList<>();
if (root == null) return ret;
Queue<TreeNode> queue = new LinkedList<>();
TreeNode cur = null;
queue.offer(root);
while (!queue.isEmpty()) {
List<Integer> list = new ArrayList<>();
int size = queue.size();
while (size != 0) {
cur = queue.poll();
list.add(cur.val);
if (cur.left != null) {
queue.offer(cur.left);
}
if (cur.right != null) {
queue.offer(cur.right);
}
size--;
}
ret.add(list);
}
return ret;
}