[LeetCode]145. 二叉树的后序遍历(java实现)栈 迭代

1. 题目

2. 读题(需要重点注意的东西)

思路(迭代):

要求使用迭代算法

用栈来进行迭代,由于栈是先进后出, 后序遍历为:左 右 根

    因此当栈非空时,先将根节点出栈,然后将左节点先进栈,再将右节点进栈 这样进行输出是:根 右 左 对输出进行翻转得到:左 右 根

3. 解法

---------------------------------------------------解法---------------------------------------------------:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
          
   
    public List<Integer> postorderTraversal(TreeNode root) {
          
   
        List<Integer> res = new ArrayList<>();
        Stack<TreeNode> stk = new Stack<>();
        
        if(root == null) return res;
        stk.push(root);
        while(!stk.isEmpty()){
          
   
            // 后序遍历: 左 右 根
            TreeNode temp = stk.pop();
            res.add(temp.val);
            // 先加左
            if(temp.left != null) stk.push(temp.left);
            // 再加右
            if(temp.right != null) stk.push(temp.right);
        }
        // 输出 : 根 右 左
        // 倒序 : 左 右 根
        Collections.reverse(res);
        return res;
    }
}

可能存在的问题:

4. 可能有帮助的前置习题

5. 所用到的数据结构与算法思想

    迭代 栈

6. 总结

先序遍历:根 左 右
中序遍历:左 根 右
后序遍历:左 右 根

按 根-右-左 的方式遍历,然后翻转,就能得到后序遍历
经验分享 程序员 微信小程序 职场和发展