二叉树相关

有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。

给定二叉树的根结点root,请返回打印结果,结果按照每一层一个数组进行储存,所有数组的顺序按照层数从上往下,且每一层的数组内元素按照从左往右排列。保证结点数小于等于500。

import java.util.*;
class TreeNode {
   int val = 0;
   TreeNode left = null;
   TreeNode right = null;
   public TreeNode(int val) {
       this.val = val;
   }
}
public class TreePrinter {
   public static int[][] printTree(TreeNode root) {
       // write code here
       if(root == null){
           return null;
       }
       LinkedList<TreeNode> link = new LinkedList<TreeNode>();
       ArrayList<ArrayList<Integer>> level = new  ArrayList<ArrayList<Integer>>();
       ArrayList<Integer> arr = new ArrayList<Integer>();
       TreeNode last = root;
       TreeNode nlast = null;
       link.add(last);
       while(!link.isEmpty()){
           TreeNode tem= link.removeFirst();
           arr.add(tem.val);
           if(tem.left!=null){
               link.add(tem.left);
               nlast=tem.left;
           }
           if(tem.right!=null){
               link.add(tem.right);
               nlast=tem.right;
           }
           if(tem==last){
               level.add(arr);
               arr=new ArrayList<Integer>();
               last=nlast;
           }
       }
       int[][] num = new int[level.size()][];
       for(int i=0;i<level.size();i++){
           num[i] = new int[level.get(i).size()];
           for(int j=0;j<level.get(i).size();j++){
               num[i][j]=level.get(i).get(j);
               System.out.print(num[i][j]+" ");
           }
           System.out.println();
       }
       return num;
   }
   public static void main(String[] args){
       TreeNode root = new TreeNode(1);
       root.left = new TreeNode(2);
       root.right=new TreeNode(4);
       root.left.right = new TreeNode(5);
       root.left.right.left = new TreeNode(4);
       root.left.right.right = new TreeNode(9);
        
       int[][] result = printTree(root);
   }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值