每天一道算法题系列十五之二叉树的后序遍历

每天一道算法题系列:
来源:力扣(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区分开,所以需要重写一个二叉树的系列,所以请关注我,后面会解释一些关于二叉树的前中后序的遍历以及添加的代码。

上一篇文章:每天一道算法题系列十四之三数之和
如果本篇内容有问题,请第一时间联系我,我会第一时间修改。
谢谢大家。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页