题解 | #把二叉树打印成多行#

把二叉树打印成多行

https://www.nowcoder.com/practice/445c44d982d04483b04a54f298796288

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    ArrayList<ArrayList<Integer>> res = new ArrayList<>();
    public ArrayList<ArrayList<Integer>> Print (TreeNode root) {
        reverse(root,1);
        return res;
    }

    public void reverse(TreeNode root,int depth){
        if(root != null){
            int size = res.size();
            if(size < depth){
                res.add(new ArrayList<>());
            }
            res.get(depth - 1).add(root.val);
            reverse(root.left,depth + 1);
            reverse(root.right,depth + 1);
        } 
    }
}

思路:递归

  1. 在递归之前要先把数据添加到list中,所以使用前序遍历的模板。
  2. 前序代码难点在于如何判断什么时候需要new ArrayList<>();
  3. 题目返回ArrayList<ArrayList<Integer>> res,说明每一层列表是res的元素,且第一层对于下标0,第二层对应下标1......。故可将数组下标和树的深度的关系建立起来。
  4. 当列表的长度小于树的深度,说明此处需要new 一个新列表.
  5. 当遍历到同层元素的时候,通过数组下标找到需要插入的列表进行添加。
全部评论

相关推荐

头顶尖尖的程序员:我是26届的不太懂,25届不应该是找的正式工作吗?为什么还在找实习?大四还实习的话是为了能转正的的岗位吗
点赞 评论 收藏
分享
牛客刘北:如果暑期实习是27届的话,你要晚一年才会毕业,企业为什么会等你呢?要搞清时间逻辑呀!27届现在实习只能是在暑假实习,这是日常实习,不是暑期实习。所以多去投日常实习吧,暑期实习肯定不会要你的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务