每天一道算法题系列:
来源:力扣(LeetCode)
本题链接:https://leetcode-cn.com/problems/binary-tree-postorder-traversal/
来源是力扣,大家喜欢可以去力扣中文网做相应的其他的题,某浏览器直接搜力扣即可。
本题难度是中等
给定一个二叉树,返回它的 后序 遍历。
示例:
输入: [1,null,2,3]
1
2
/
3
输出: [3,2,1]
这是二叉树系列,是有一个一套的,由于今天做了这道题,感觉要写一个系列的好一些,但是好久没有发算法的文章了,为了证明我还在,我就先发一下,然后后面会补上二叉树详细的信息
/*
这里采用的是迭代的方式去做的这道题,还有一种跟加简单的做法是递归的方式,我会在明天或者后天写出来和大家见面
*/
private static void fristList1(TreeNode treeNode) {
TreeNode p = treeNode ;
List<Integer> list = new ArrayList<>();
//这里是定义了一个栈,还记得它的特性吗? 先进后出
Stack<TreeNode> stack = new Stack<>();
while(p != null || !stack.isEmpty()){
while (p != null){
//这里是取到p的值,然后放入list中
list.add(p.getVal());
//进栈的一个过程
stack.push(p);
p = p.getLeft();
}
if(!stack.isEmpty()){
//这里就是一个压栈的过程,把之前存入的node一个一个的给pop出去
p = stack.pop();
//有人会疑问为什么这里会使用p.getRight嘛
/*
其实TreeNode是有专门的定义个,和node是一样的,
因为jdk自带的node不满足自身需要的,所以需要重新定义,
如果这里不是很懂的朋友可以关注我一下,我后面会写一篇文章去解释
因为二叉树是分了左右子节点的,可以简单的理解左边的左节点就是getLeft,而得到右边的就是右子节点
*/
p = p.getRight();
}
}
list.forEach(System.out::print);
}
这篇文章还会有后序的,只是想把他和leetcode区分开,所以需要重写一个二叉树的系列,所以请关注我,后面会解释一些关于二叉树的前中后序的遍历以及添加的代码。
上一篇文章:每天一道算法题系列十四之三数之和
如果本篇内容有问题,请第一时间联系我,我会第一时间修改。
谢谢大家。