美文网首页
非递归二叉树遍历

非递归二叉树遍历

作者: 请不要问我是谁 | 来源:发表于2020-04-18 21:13 被阅读0次
    class TreeNode{
        int val;
        TreeNode left;
        TreeNode right;
        public TreeNode(int val){
            this.val = val;
        }
    }
    

    前序遍历

    public static void preorderTraversal(TreeNode root){
        if(root==null)
            return;
        TreeNode node = root;
        Stack<TreeNode> s = new Stack<>();
        s.push(node);
        while (node!=null||!s.isEmpty()){
            while (node!=null){
                System.out.println(node.val);
                s.push(node);
                node=node.left;
            }
            if(!s.isEmpty()){
                node = s.pop();
                node = node.right;
            }
        }
    }
    

    中序遍历

    private static void middleorderTraversal(TreeNode root){
        if(root==null)
            return;
        Stack<TreeNode> s = new Stack<>();
        TreeNode node = root;
        while (node!=null||!s.isEmpty()){
            while (node!=null){
                s.push(node);
                node=node.left;
            }
            if (!s.isEmpty()){
                node=s.pop();
               // 与前序遍历不同的地方
                System.out.println(node.val);
                node=node.right;
            }
        }
    }
    

    后续遍历

    private static void postorderTraversal(TreeNode root){
        if (root==null)
            return;
        Stack<TreeNode> s = new Stack<>();
        TreeNode node=root;
        // 需要记录上次输出的位置
        TreeNode lastVisit = root;
        while (node!=null||!s.isEmpty()){
            while (node!=null){
                s.push(node);
                node=node.left;
            }
            node = s.peek();
            if(node.right==null||node.right==lastVisit){
                System.out.println(node.val);
                s.pop();
                lastVisit = node;
                node = null;
            }else {
                node = node.right;
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:非递归二叉树遍历

          本文链接:https://www.haomeiwen.com/subject/cwmavhtx.html