Java 实现从上往下打印出二叉树的每个节点,同层节点从左至右打印。

思路:

思路很明确,将节点和节点存储的值分别依次存入链表。

public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
  	ArrayList<Integer> intList = new ArrayList<Integer>();
  	ArrayList<TreeNode> treeList = new ArrayList<TreeNode>();
 	 if (root == null) {
   		return intList;
 	 }
 	 treeList.add(root);
 	 for (int i = 0; i < treeList.size(); i++) {
  		 TreeNode node = treeList.get(i);
  		 if (node.left != null) {
   			 treeList.add(node.left);
  		 }
  		 if (node.right != null) {
  			  treeList.add(node.right);
  		 }
  		 intList.add(node.val);
 	 }
  return intList;
 }

代码讲解:
首先将root节点放入treeList,此时treeList的长度为1,然后进入for循环,新建一个node用来获取当前扫描的节点,而当前i为0所以节点是root(当然也只有root),然后接下来是将root节点的左右节点放入treeList链表,此时treeList的长度已经变成了3,最后将root的值放入intList中完成。开始循环,直到树的最后一层节点的左右节点都为空时结束循环。

使用队列也能达到同样的效果,无非就是不保存节点信息罢了:

public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {      
         Queue <TreeNode>queue=new LinkedList<TreeNode>();
         ArrayList <Integer>list=new ArrayList<Integer>();
         if(root==null)return list;
         queue.offer(root);
         while(!queue.isEmpty()){
              TreeNode t=queue.poll();
              list.add(t.val);
             if(t.left!=null){
                 queue.offer(t.left);
             }
             if(t.right!=null){
                 queue.offer(t.right);
             }
         }
         return list;  
 }

你可能感兴趣的:(算法)