题目
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
分析
思路一:
这种打印方式需要遍历整棵树,而遍历的顺序并非前序,中序,后续。而是要求按层的顺序,从左往右的优先顺序打印。
举例来说,打印了根结点之后,我们应存储其左右子结点以供打印,而当要打印左子结点时,应将左子节点的子结点按从左至右的顺序存储起来。而此时存储的有根结点的右子结点和左子结点的子结点。后续以此类推。可以看出,我们存储临时的以供打印的子结点的这种数据结构应为队列(Quene)。
总结:
广度优先遍历即上述按层的顺序来遍历树,首先应将第一个结点存入队列。接下来每次从队列的头部取一个结点出来,遍历这个节点所能到达的节点(即子节点)并将其存入队列。重复直至遍历完。
时间复杂度:o(N)
空间复杂度:o(N)
代码:
import java.util.ArrayList;
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
import java.util.LinkedList;
import java.util.Queue;
public class Solution {
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<Integer> result = new ArrayList<Integer>();
if(root==null) return result;
Queue<TreeNode> quene = new LinkedList<TreeNode>();
quene.offer(root);
while(!quene.isEmpty()){
TreeNode temp = quene.poll();
result.add(temp.val);
if(temp.left!=null) quene.offer(temp.left);
if(temp.right!=null) quene.offer(temp.right);
}
return result;
}
}