从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
如输入[3,9,20,null,null,15,7];输出
[3,9,20,15,7]
解析:打印二叉树的每个节点其实就相当于是做二叉树的广度搜索算法,只能通过队列来实现。
package learnproject.offer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
/*
* 32.从上到下打印二叉树
*/
public class Demo32 {
/*
* 解题思路:
* 广度优先搜索算法只能通过队列来实现
*/
public int[] levelOrder(TreeNode root) {
if(root == null) {
return new int[0];
}
List<Integer> list = new ArrayList<Integer>();
//LinkedList实现了Queue的接口
Queue<TreeNode> queue = new LinkedList<TreeNode>();
//添加根节点
queue.add(root);
while(!queue.isEmpty()) {
//队头结点弹出
TreeNode treeNode = queue.poll();
TreeNode leftNode = treeNode.left;
if(leftNode!=null) {
//将左结点加入
queue.add(leftNode);
}
TreeNode rightNode = treeNode.right;
if(rightNode != null) {
//将右结点加入
queue.add(rightNode);
}
list.add(treeNode.val);
}
int[] array = new int[list.size()];
for(int i=0;i<array.length;i++) {
array[i] = list.get(i);
}
return array;
}
public static void main(String args[]) {
TreeNode treeNode1 = new TreeNode(3);
TreeNode treeNode2 = new TreeNode(9);
TreeNode treeNode3 = new TreeNode(20);
TreeNode treeNode4 = new TreeNode(15);
TreeNode treeNode5 = new TreeNode(7);
treeNode1.left = treeNode2;
treeNode1.right = treeNode3;
treeNode3.left = treeNode4;
treeNode3.right = treeNode5;
Demo32 demo = new Demo32();
int[] array = demo.levelOrder(treeNode1);
System.out.println(Arrays.toString(array));
}
}