題目
從上往下打印出二叉樹的每個節(jié)點,同層節(jié)點從左至右打印。
程序核心思想
原來想用遞歸做,但是發(fā)現遞歸一下就到最底層了,不能實現層級遍歷。所以想到用隊列,隊列里面存放的是樹的節(jié)點,出一個結點就添加進去它的左孩子和右孩子,這樣就能實現層級遍歷了。
Tips
- 隊列的一些使用方法:
Java 集合中的 Queue 繼承自Collection 接口,Deque, LinkedList, PriorityQueue, BlockingQueue 等類都實現了它。
Queue使用時要盡量避免Collection的add()和remove()方法,而是要使用offer()來加入元素,使用poll()來獲取并移出元素。它們的優(yōu)點是通過返回值可以判斷成功與否,add()和remove()方法在失敗的時候會拋出異常。 如果要使用前端而不移出該元素,使用element()或者peek()方法。 - 創(chuàng)建隊列:
Queue<TreeNode> queue = new LinkedList<TreeNode>();
添加元素:offer()
出隊:poll()
是否為空:isEmpty()
查看隊頭元素(不出隊):peek()或element()
代碼
import java.util.ArrayList;
import java.util.Queue;
import java.util.LinkedList;
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<TreeNode>();
ArrayList<Integer> array = new ArrayList<Integer>();
if(root == null) return array;
queue.offer(root);
while(queue.isEmpty() == false){
TreeNode node = (TreeNode)queue.poll();
if(node.left != null) queue.offer(node.left);
if(node.right != null) queue.offer(node.right);
array.add(node.val);
}
return array;
}
}