题目描述:
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
思路:
此题实际上就是二叉树层序遍历方法的考察,具体思路是:使用一个集合(或者栈,但是相对来说使用栈操作会方便一些)来保存遍历的节点,还需要创建一个集合用来保存最后输出的遍历序列。从根节点开始遍历,首先把该节点放入集合中,并输出其值,之后便从集合中移除该节点,不过在此之前需要判断该节点是否有左右孩子,如果有左右(满足其一就可以)孩子,便把左右孩子放入集合中。每次输出值后便把节点具体的值放入遍历集合中,作为最后的返回结果。
代码实现:
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> result = new ArrayList<Integer>();
Queue<TreeNode> queue = new LinkedList<TreeNode>();
if(root == null) return result;
queue.add(root);
while(!queue.isEmpty()){
TreeNode tempNode = queue.poll();
result.add(tempNode.val);
if(tempNode.left != null)
queue.add(tempNode.left);
if(tempNode.right != null)
queue.add(tempNode.right);
}
return result;
}
}