持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情
前言
今天接着来学习二叉树的相关题目,现在的我对于二叉树的简单类型的题目简直就是信手捏来。
今天的这道题目,和上一篇刷题专栏中的题目特别类似,那就是《二叉树的后续遍历》。
比起前序排序,这道题就差不多了,只不过是要转换一下思维。
接下来,我们就一起来看看吧。
算法题:二叉树的后序遍历
首先,因为和昨天的那道题太像了,我就选择不那么啰嗦了。
处理二叉树的方式,通常就是递归、迭代遍历。
如果要一个个的获取二叉树上每一个节点上面的值。
那我觉得递归是最容易理解的,而迭代是性能最好的。
这里大家可以都去试一下。
再者如何来拿到后序遍历的数值呢。
其实我们还是要正序遍历的,只不过存储值的时候要先存子节点,再存当前节点。
不知道有没有理解,下面来看一下代码。
代码展示
下面就是本次执行的代码了,采用就是二叉树递归的方式。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> resultList = new ArrayList<Integer>();
digui(root, resultList);
return resultList;
}
public void digui(TreeNode root, List<Integer> resultList) {
if (root == null) {
return;
}
digui(root.left, resultList);
digui(root.right, resultList);
resultList.add(root.val);
}
}
代码执行结果
本次的代码执行结果,只能算是部分成功,耗费的内存名次太差了也;这简直就是火葬场。
总结
今天这道题和昨天的那道题简直太像了,只不过是存放顺序有些不一样而已,所以大家如果在做这道题的时候,也可以去昨天那篇文章。