剑指offer把二叉树打印成多行
Posted 杀生丸少爷
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer把二叉树打印成多行相关的知识,希望对你有一定的参考价值。
这道题跟昨天的题略有不同,昨天的题是从上往下打印成二叉树,而这道题多了一个分层。
今天正式收到了一家公司的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把二叉树打印成多行的主要内容,如果未能解决你的问题,请参考以下文章