前言
今天接着来学习二叉树的相关题目,现在的我对于二叉树的简单类型的题目简直就是信手捏来。
今天的这道题目,和上一篇刷题专栏中的题目特别类似,那就是《二叉树的后续遍历》。
比起前序排序,这道题就差不多了,只不过是要转换一下思维。
接下来,我们就一起来看看吧。
算法题:二叉树的后序遍历
首先,因为和昨天的那道题太像了,我就选择不那么啰嗦了。
处理二叉树的方式,通常就是递归、迭代遍历。
如果要一个个的获取二叉树上每一个节点上面的值。
那我觉得递归是最容易理解的,而迭代是性能最好的。
这里大家可以都去试一下。
再者如何来拿到后序遍历的数值呢。
其实我们还是要正序遍历的,只不过存储值的时候要先存子节点,再存当前节点。
不知道有没有理解,下面来看一下代码。
代码展示
下面就是本次执行的代码了,采用就是二叉树递归的方式。
/** * 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); } }
代码执行结果
本次的代码执行结果,只能算是部分成功,耗费的内存名次太差了也;这简直就是火葬场。
总结
今天这道题和昨天的那道题简直太像了,只不过是存放顺序有些不一样而已,所以大家如果在做这道题的时候,也可以去昨天那篇文章。