二叉树---后序遍历(递归与迭代)

题目:给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历

思路一:递归法。

代码:

java 复制代码
 public List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> result=new ArrayList<>();
        postOrder(root,result);
        return result;

    }
    public void postOrder(TreeNode root,List<Integer> result){
        if(root==null)
            return;
        postOrder(root.left,result);
        postOrder(root.right,result);
        result.add(root.val);
    }

思路二:迭代法。

代码:

java 复制代码
public List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> result=new ArrayList<>();
        Stack<TreeNode> stack=new Stack<>();
        if(root!=null){
            stack.push(root);
        }
        while(!stack.isEmpty()){
            TreeNode node=stack.peek();
            if(node!=null){
                stack.pop();// 将该节点弹出,避免重复操作,下面再将中右左节点添加到栈中
                stack.push(node);//压入中节点
                stack.push(null);//中节点只访问,未处理,压入Null来标记
                if(node.right!=null) stack.push(node.right);//压入右节点
                if(node.left!=null) stack.push(node.left);//压入左节点
            }
            else{
                stack.pop();//弹出null
                TreeNode n=stack.peek();//处理中节点
                result.add(n.val);
                stack.pop();//中节点加入结果集后弹出
            }
        }
        return result;
    }
相关推荐
SharkWeek.1 小时前
【力扣Hot 100】普通数组2
数据结构·算法·leetcode
XianxinMao8 小时前
RLHF技术应用探析:从安全任务到高阶能力提升
人工智能·python·算法
hefaxiang8 小时前
【C++】函数重载
开发语言·c++·算法
exp_add39 小时前
Codeforces Round 1000 (Div. 2) A-C
c++·算法
查理零世9 小时前
【算法】经典博弈论问题——巴什博弈 python
开发语言·python·算法
神探阿航10 小时前
第十五届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组
java·算法·蓝桥杯
皮肤科大白10 小时前
如何在data.table中处理缺失值
学习·算法·机器学习
不能只会打代码12 小时前
蓝桥杯例题一
算法·蓝桥杯
OKkankan12 小时前
实现二叉树_堆
c语言·数据结构·c++·算法
ExRoc13 小时前
蓝桥杯真题 - 填充 - 题解
c++·算法·蓝桥杯