剑指offer 把二叉树打印成多行

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

思路1
如题按层打印,所以用层序遍历。

import java.util.*;
public class Solution {
    ArrayList<ArrayList<Integer> > Print(TreeNode root) {
           ArrayList<ArrayList<Integer>> ans=new ArrayList<>();
           ArrayList<Integer> list;
           if(root==null) return ans;
           Queue<TreeNode> queue=new LinkedList();
           queue.add(root);
           while(!queue.isEmpty()){
               int cur=0,next=queue.size();
               list=new ArrayList();
               while(cur<next){
                   TreeNode node=queue.poll();
                   if(node.left!=null) queue.add(node.left);
                   if(node.right!=null) queue.add(node.right);
                   cur++;
                   list.add(node.val);
               }
               ans.add(list);
           }
        return ans;
    } 
}

思路2
递归

public class Solution {
    ArrayList<ArrayList<Integer> > Print(TreeNode root) {
           ArrayList<ArrayList<Integer>> ans=new ArrayList<>();
           level(root,1,ans);
           return ans;
    } 
    public void level(TreeNode root,int depth,ArrayList<ArrayList<Integer>> ans){
        if(root==null) return ;
        if(depth>ans.size())
            ans.add(new ArrayList());
        ans.get(depth-1).add(root.val);
        level(root.left,depth+1,ans);
        level(root.right,depth+1,ans);
    }
}
发布了45 篇原创文章 · 获赞 4 · 访问量 1031
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览