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