//层序遍历用队列,队列中不会出现null
//删本身,进孩子
public static void levelOrderTraversal(TreeNode root) {
//if (root == null) {
// return;
//}
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()) {
TreeNode front = queue.poll();
System.out.println(front.val);
if (front.left != null) {
queue.add(front.left);
}
if (front.right != null) {
queue.add(front.right);
}
}
}
//需要返回两个以上值的时候用类封装起来
//类似二维数组二叉树
private static class Element{
TreeNode node;
int level;
//层数
}
public List<List<Integer>> levelOrder(TreeNode root){
List<List<Integer>> retList=new LinkedList<>();
if (root == null) {
return retList;
}
Queue<Element> queue = new LinkedList<>();
Element e=new Element();
e.node=root;
e.level=0;
queue.add(e);
while(!queue.isEmpty()){
Element front = queue.poll();
if(front.level==retList.size()){
retList.add(new ArrayList<>());
}
retList.get(front.level).add(front.node.val);
if (front.node.left != null) {
Element l = new Element();
l.node = front.node.left;
l.level = front.level + 1;
queue.add(l);
}
if (front.node.right != null) {
Element l = new Element();
l.node = front.node.right;
l.level = front.level + 1;
queue.add(l);
}
}
return retList;
}
//判断是否完全二叉树
public boolean isComplete(TreeNode root){
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
//层序遍历直到遇到空
while(true){
TreeNode front=queue.poll();
if(front==null){
break;
}
queue.add(front.left);
queue.add(front.right);
}
while (!queue.isEmpty()){
TreeNode node =queue.poll();
if(node!=null){
return false;
}
}
return true;
}