• 二叉树后序非递归遍历


    package com.basic.bt;
    
    import java.util.ArrayList;
    import java.util.Stack;
    
    /**
     * Created by mac on 2017/1/19.
     */
    public class PostOrderBT {
    
        ArrayList<Integer> result = new ArrayList<Integer>();
    
        public void postorder(TreeNode root) {
            if(root == null) {
                return;
            }
            postorder(root.left);
            postorder(root.right);
            result.add(root.val);
        }
    
        public void postOrderTraversal(TreeNode root) {
    
            if(root == null) {
                return;
            }
    
            Stack<TreeNode> stack = new Stack<TreeNode>();
            TreeNode node = root;
            TreeNode pre = null;
    
            while( node != null || !stack.isEmpty()) {
                while(node != null) {
                    stack.push(node);
                    node = node.left;
                }
    
                // node指向了空,所以要pop()一下  另外也是出于 对node右孩子的考虑;
                node = stack.pop();
                while( node != null && (node.right == null || node.right == pre)) {
                    result.add(node.val);
                    pre = node;
                    if(stack.isEmpty()) {
                        return;
                    }
                    node = stack.pop();
                }
    
                stack.push(node);
                node = node.right;
            }
    
        }
    
    
        public  static void main(String[] args) {
            PostOrderBT in = new PostOrderBT();
            TreeNode root = new TreeNode(0);
            TreeNode node1 = new TreeNode(1);
            TreeNode node2 = new TreeNode(2);
            TreeNode node3 = new TreeNode(3);
            TreeNode node4 = new TreeNode(4);
    
            root.left = node1;
            root.right = node2;
            node1.left = node3;
            node1.right =node4;
    
            in.postOrderTraversal(root);
    
            for(int i = 0; i < in.result.size(); i++) {
                System.out.println(in.result.get(i));
            }
    
        }
    
    }
    

      

  • 相关阅读:
    root用户javac可以执行sudo后command not found问题
    机器学习 KNN算法实现 (鸢尾花)
    机器学习 KNN分类算法简单介绍+数据集拆分
    机器学习的一般流程
    机器学习算法的性能评价
    Opencv 自带函数(Haar)的人脸检测
    Opencv 的基础认识
    labelme 的学习
    天梯赛总结CCCC
    VScode配置c,c++编译环境
  • 原文地址:https://www.cnblogs.com/superzhaochao/p/6324803.html
Copyright © 2020-2023  润新知