题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
思路:
这道题其实就是一个层次打印二叉树,这个时候需要使用的数据结构就是一个队列,利用队列先进先出的特点,每次遍历一个结点,然后就把这个结点的左子树和右子树都放到这个队列中,然后设置一个while循环每次都是判断这个队列是否为空,如果不为空那么这个时候就取出一个结点,然后把他的左子树和右子树放入道这个队列中,这样的一个过程就使得每次都是按照层次的顺序将这些结点放入到这个队列中,然后每次都是取出这个结点中的数据,这样一来,就形成了按照层次有序的访问这颗二叉树了。
实现:
需要建立一个ArrayList<TreeNode>其实java给我们提供了一个队列的结构。也就是说利用李哥ArrayList来实现这个队列。
import java.util.ArrayList;
/**
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来实现一个队列,然后每次访问一个吧一个结点入队列,然后判断这个结点是否有左右子结点,如果有,则把这个左子节点放入这个队列。
如果有右子树,把这个右子结点也放入到这个队列当中,然后每次取出来的也是这个队列的第一个结点。
*/
ArrayList<Integer> list = new ArrayList<Integer>();
ArrayList<TreeNode> node = new ArrayList<TreeNode>();
if(root == null){
return list;
}
node.add(root);
while(node.size() > 0){
TreeNode treeNode = node.remove(0);
if(treeNode.left != null){
node.add(treeNode.left);
}
if(treeNode.right != null){
node.add(treeNode.right);
}
list.add(treeNode.val);
}
return list;
}
}
’