题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
解题思路
二叉树的层次遍历。借助一个队列,先将根结点放入队列,然后只要队列不空,就取出队头结点,然后放取出节点的左右孩子,以此循环。
以这个二叉树为例:
- 先放根节点 1。
- 取队列首节点 1,将左右孩子 2,3 依次入列。
- 取队列首节点 2,将左孩子 4 入队列。
- 取队列首节点 3,将左右孩子 5,6 依次入列。
- 取队列首节点 4,将右孩子 7入队列。
- 取队列首节点 5,无孩子入列。
- 取队列首节点 6, 将左孩子 8 入队列。
- 取队列首节点 7,无孩子入列。
- 取队列首节点 8,无孩子入列。
代码实现
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) {
ArrayList<Integer> ans = new ArrayList<Integer>();
Queue<TreeNode> myQueue = new LinkedList<>();
if(root == null)
return ans;
myQueue.offer(root);
while(!myQueue.isEmpty()){
TreeNode tempNode = myQueue.poll();
ans.add(tempNode.val);
if (tempNode.left!=null)
myQueue.offer(tempNode.left);
if (tempNode.right!=null)
myQueue.offer(tempNode.right);
}
return ans;
}
}