算法-把二叉树打印成多行

题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

package niuke;

import java.util.ArrayList;
import java.util.Queue;
import java.util.LinkedList;



public class Solution {
    ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
        ArrayList<ArrayList<Integer> > totalNode = new ArrayList<ArrayList<Integer> >();
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        ArrayList<Integer> layerNode = new ArrayList<Integer>();
        queue.add(pRoot);
        
        Queue<TreeNode> result = new LinkedList<TreeNode>();
        TreeNode node = null;
        while(queue.size() != 0){
            layerNode = new ArrayList<Integer>();
            while((node = queue.poll())!=null){
                layerNode.add(node.val);
                if(node.left!=null) {
                	result.offer(node.left);
                }
                if(node.right!=null){
                	result.offer(node.right);
                }
            }
            queue = result;
            result=new LinkedList<TreeNode>();
            if(!layerNode.isEmpty()){
            	System.out.println(layerNode);
            	totalNode.add(layerNode);
            }
        }
        return totalNode;
    }
    
    ArrayList<ArrayList<Integer> > Print2(TreeNode pRoot) {
      ArrayList<ArrayList<Integer>> result = new ArrayList<>();
      ArrayList<Integer> list = new ArrayList<>();
      Queue<TreeNode> queue = new LinkedList<>();
      TreeNode temp;
      if(pRoot == null){
          return result;
      }
      queue.offer(pRoot);
      int start = 0,end = 1;
      while(!queue.isEmpty()){
          temp = queue.poll();
          list.add(temp.val);
          start++;
          if(temp.left != null){
              queue.offer(temp.left);
          }
          if(temp.right != null){
              queue.offer(temp.right);
          }
          if(start == end){
              start = 0;
              end = queue.size();
              result.add(list);
              list = new ArrayList<>();
          }
      }
      return result;
  }
    
   public static void main(String[] args) {
  	 TreeNode node1 = new TreeNode(8);
  	 TreeNode node21 = new TreeNode(6);
  	 TreeNode node22 = new TreeNode(10);
  	 TreeNode node31 = new TreeNode(5);
  	 TreeNode node32 = new TreeNode(7);
  	 TreeNode node33 = new TreeNode(9);
  	 TreeNode node34 = new TreeNode(11);
  	 node1.left = node21;
  	 node1.right = node22;
  	 
  	 node21.left = node31;
  	 node21.right = node32;
  	 
  	 node22.left = node33;
  	 node22.right = node34;
  	 
  	 new Solution().Print(node1);
	}
    
}
class TreeNode {
  int val = 0;
  TreeNode left = null;
  TreeNode right = null;

  public TreeNode(int val) {
      this.val = val;
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值