题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
思路分析
这里的打印,可不是前序打印(根左右),而是按照层次打印。我们可以借助 ArrayList 模拟一个队列,每次遍历一层的一个结点,就把这个结点的左子树和右子树都放到这个队列中。
用 while 循环判断这个队列是否为空,如果不为空那么,就取出一个结点,然后把它的左子树和右子树放入到这个队列中,这个过程就使得每次都是按照层次的顺序将这些结点放入到这个队列中。
最后每次都是取出这个结点中的数据,这样一来,就形成了按照层次有序的访问这颗二叉树了。
/**
思路是用 arraylist 模拟一个队列来存储相应的 TreeNode
*/
public class Solution {
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<Integer> list = new ArrayList<>();
ArrayList<TreeNode> queue = new ArrayList<>();
if (root == null) {
return list;
}
queue.add(root); //遍历当前节点,放入模拟队列中
while (queue.size() != 0) { // 判断该队列是否为空
TreeNode temp = queue.remove(0); //模拟队列弹出,取出该队列的第一个值
if (temp.left != null){ //判断当前节点的左子树是否为空
queue.add(temp.left);
}
if (temp.right != null) {//判断当前右子树是否为空
queue.add(temp.right);
}
list.add(temp.val); //把当前这一层的节点值存入 list 中
}
return list;
}
}
链接:https://www.nowcoder.com/questionTerminal/7fe2212963db4790b57431d9ed259701
来源:牛客网
网友评论