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

Posted 杀生丸少爷

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer把二叉树打印成多行相关的知识,希望对你有一定的参考价值。

This browser does not support music or audio playback. Please play it in Weixin or another browser.


这道题跟昨天的题略有不同,昨天的题是从上往下打印成二叉树,而这道题多了一个分层。


今天正式收到了一家公司的offer,公司名字暂时保密。目前手里有两个可供选择的offer,这种结果也算是对过往努力的一种肯定吧。但是还是感觉自己需要再次静下心来沉淀一段时间。总结,规划,再出发。


有想一起刷题or学习的朋友,欢迎微信私信哦!


1、题目描述



2、解题思路


本题采用递归的思路。每次递归的时候,都会带上所在节点的深度,且每层(也是深度的体现)都创建一个ArrayList来存放该层的值。是否是同一层,主要是通过一个depth变量来判断。在同一层先左节点再右节点的顺序。代码如下:


import java.util.ArrayList;/*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>> Print(TreeNode pRoot) { ArrayList<ArrayList<Integer>> list = new ArrayList<>(); if (pRoot == null) { return list; } getResult(list, pRoot,1); return list; } public void getResult(ArrayList<ArrayList<Integer>> list, TreeNode pRoot, int depth) { if (pRoot == null) return; //通过depth可以判断出是不是同一层级 if (depth > list.size()) { list.add(new ArrayList<>()); } list.get(depth - 1).add(pRoot.val); if (pRoot.left != null) { getResult(list, pRoot.left, depth + 1); } if (pRoot.right != null) { getResult(list, pRoot.right, depth + 1); } }}


3、结语


算法能力不是一朝一夕就能培养出来的。还记得刚开始刷题的时候,脑袋特别笨拙,一进来就陷入了某个细节里面,试图通过把数据一个一个写出来的方式把它做出来。现在再来看的话,算法就是把一些数据结构和解题思路结合起来罢了,也许理解的不对,但也算是成长了。


无论是现在还是从前,想起过去的一些事情,总会有一种如果当初怎样的情绪。我们不妨换个角度,在未来的某一天,我们会不会想到今天的某件事情,也会说如果当初呢。所以,过去的就过去吧,做好当下的自己是最重要的事情。


以上是关于剑指offer把二叉树打印成多行的主要内容,如果未能解决你的问题,请参考以下文章

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

《剑指offer》:[60]把二叉树打印成多行

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

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

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

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