Leetcode刷题-二叉树的先、后、中序遍历(迭代)

175 阅读1分钟

迭代法(五行代码 )

先序

思想

一直走到左子树的尽头,边走边遍历当前节点的值,走到尽头后转向父节点的右子树,,重复刚刚的过程

参考代码

中序遍历

思想

和先序遍历差不多,但是要走到尽头后在开始访问值

参考代码

后序遍历

思想

因为后序遍历 :左右根(可以由 ‘根右左’ 翻转得到,而 ‘根右左’ 与先序遍历的 "根左右" 代码微调即可)

参考代码

class Solution {
    public List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> res = new ArrayList<>();
        Stack<TreeNode> stack = new Stack<>();
        TreeNode cur = root; //当前节点
        while(!stack.isEmpty() || cur != null){
            while(cur != null){// 一直往右走
                res.add(cur.val);
                stack.push(cur);
                cur = cur.right;
            }
            //当走到空,即当前节点的父节点没有右子树,则转向父节点的左子树,然后重复
            TreeNode node = stack.pop();
            cur = node.left;
        }
        Collections.reverse(res);//翻转列表
        return res;
    }
}