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

题目:给你一棵二叉树的根节点 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;
    }
相关推荐
茉莉玫瑰花茶10 分钟前
C++ 17 详细特性解析(4)
开发语言·c++·算法
long31625 分钟前
K‘ 未排序数组中的最小/最大元素 |期望线性时间
java·算法·排序算法·springboot·sorting algorithm
进击的小头28 分钟前
FIR滤波器实战:音频信号降噪
c语言·python·算法·音视频
xqqxqxxq32 分钟前
洛谷算法1-1 模拟与高精度(NOIP经典真题解析)java(持续更新)
java·开发语言·算法
razelan33 分钟前
初级算法技巧 4
算法
砍树+c+v33 分钟前
3a 感知机训练过程示例(手算拆解,代码实现)
人工智能·算法·机器学习
zy_destiny35 分钟前
【工业场景】用YOLOv26实现4种输电线隐患检测
人工智能·深度学习·算法·yolo·机器学习·计算机视觉·输电线隐患识别
智驱力人工智能44 分钟前
货车违规变道检测 高速公路安全治理的工程实践 货车变道检测 高速公路货车违规变道抓拍系统 城市快速路货车压实线识别方案
人工智能·opencv·算法·安全·yolo·目标检测·边缘计算
罗湖老棍子1 小时前
【例9.18】合并石子(信息学奥赛一本通- P1274)从暴搜到区间 DP:石子合并的四种写法
算法·动态规划·区间dp·区间动态规划
2301_810730101 小时前
python第四次作业
数据结构·python·算法