題目描述
從上往下打印出二叉樹的每個節點,同層節點從左至右打印。
解題思路
本道題的解題核心是“層序遍歷”。我們藉助隊列來實現層序遍歷。具體的過程:
- 根節點入隊列。
- 根節點出隊列,執行打印等操作;再將左右孩子依次入隊列。
- 重複1、2操作,直到二叉樹全部遍歷結束爲止。
代碼
public class Solution {
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
// 本道題的核心思想就是層序遍歷
// 用於保存遍歷節點的值
ArrayList<Integer> list = new ArrayList<>();
if(root == null)
return list;
Queue<TreeNode> queue = new LinkedList<>();
// 將根節點入隊列
queue.offer(root);
while(!queue.isEmpty()){
// 取出根節點
TreeNode cur = queue.poll();
// 將當前指向的元素的左右孩子依次插入隊列
if(cur.left != null)
queue.offer(cur.left);
if(cur.right != null)
queue.offer(cur.right);
// 將根節點元素加入集合
list.add(cur.val);
}
return list;
}
}