一、题目
从上往下打印出二叉树的每个结点,同一层的结点按照从左向右的顺序打印。
二、解题思路
这道题实质是考查树的遍历算法。从上到下打印二叉树的规律:每一次打印一个结点的时候,如果该结点有子结点, 则把该结点的子结点放到一个队列的末尾。接下来到队列的头部取出最早进入队列的结点,重复前面的打印操作,直至队列中所有的结点都被打印出来为止。
/**
* 从上往下打印出二叉树的每个结点,向一层的结点按照从左往右的顺序打印。
* 例如下的二叉树,
* 8
* / \
* 6 10
* / \ / \
* 5 7 9 11
* 则依次打印出8、6、10、5、7 、9、11.
*
* @param treeNode 树的根结点
*/
public ArrayList<Integer> PrintFromTopToBottom(TreeNode treeNode) {
ArrayList<Integer> arrayList = new ArrayList<>();
if (treeNode == null) {
return arrayList;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.add(treeNode);
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
if (node.left != null) {
queue.add(node.left);
}
if (node.right != null) {
queue.add(node.right);
}
arrayList.add(node.data);
}
return arrayList;
}
public class TreeNode {
public int data;
public TreeNode left;
public TreeNode right;
public TreeNode(int data) {
this.data = data;
}
@Override
public String toString() {
return "TreeNode{" +
"data=" + data +
", left=" + left +
", right=" + right +
'}';
}
}