0
点赞
收藏
分享

微信扫一扫

二叉树后序遍历非递归遍历实现图解

青鸾惊鸿 2023-08-09 阅读 46


二叉树的后序遍历

输入:

{1,#,2,3}

返回值:

[3,2,1]

输入:

{1}

返回值:

[1]

代码实现

      public int[] postorderTraversal (TreeNode root) {
            TreeNode cur = root;
            List<Integer> list = new ArrayList<>();
            Deque<TreeNode> stack = new ArrayDeque<>();
             TreeNode pre = null;
            while(!stack.isEmpty() || cur != null) {
                while(cur != null){
                    stack.push(cur);
                    cur = cur.left;
                }
               
                TreeNode top = stack.pop();
                if(top.right == null || top.right == pre) {
                    list.add(top.val);
                    pre = top;
                } else {
                    stack.push(top);
                    cur = top.right;
                }
            }
            int [] arr = new int[list.size()];
            for(int i = 0; i < list.size(); i++) {
                arr[i] = list.get(i);
            }
            return arr;
        }

图解

二叉树后序遍历非递归遍历实现图解_二叉树遍历

二叉树后序遍历非递归遍历实现图解_二叉树遍历_02

二叉树后序遍历非递归遍历实现图解_二叉树遍历_03

二叉树后序遍历非递归遍历实现图解_二叉树遍历_04

二叉树后序遍历非递归遍历实现图解_二叉树遍历_05

发现bug

二叉树后序遍历非递归遍历实现图解_二叉树遍历_06

我们就可以添加一个判断标志防止出现死循环

二叉树后序遍历非递归遍历实现图解_二叉树遍历_07

举报

相关推荐

0 条评论