层次遍历求二叉树宽度_LeetCode刷题——21.求二叉树后序遍历

"这篇博客介绍了如何使用递归和非递归方法实现二叉树的后序遍历。对于递归方法,遵循左-右-根的顺序,先递归找到最底层的左右子节点,再保存并返回结果。非递归方法则利用栈来解决,同样能完成遍历。文章以给定的二叉树{1,#,2,3}
摘要由CSDN通过智能技术生成

难度(medium)

题目描述:

求给定的二叉树的后序遍历。例如:给定的二叉树为{1,#,2,3}

1↵    ↵     2↵    /↵   3↵

返回[3,2,1]

思路:

根据后序遍历的规则,左——右——根,那么可以考虑先找到左子节点的最底层的左子节点,然后进行保存,同样的,再找到左子节点的最底层的左子节点进行保存,再找到根节点保存,然后按照这种顺序进行输出,利用递归实现树的所有节点遍历。

561db2e849823232d6e4fa717ff4987b.png

代码:

import java.util.ArrayList;    public static ArrayList<Integer> postOrder(TreeNode root) {        //如果根不为空        if (root != null) {            //递归找到此次根下最底层的左子节点            ArrayList<Integer> left = postOrder(root.left);            //递归找到此次根下最底层的右子节点            ArrayList<Integer> right = postOrder(root.right);            ArrayList<Integer> result = new ArrayList<>();            //按规则顺序添加            result.addAll(left);            result.addAll(right);            result.add(root.data);            //返回添加的一种结果,最后将几种集中结果凑在一起就是完整的后序遍历            return result;        }        //如果根为空        return new ArrayList<>();    }}

还有一种方法时非递归形式,用栈来解决,也可以。

封面来源于网络,侵删

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值