首页 > 其他 > 详细

二叉树的迭代遍历

时间:2021-04-02 21:46:38      阅读:22      评论:0      收藏:0      [点我收藏+]

二叉树的迭代遍历

递归的实现底层是栈,所以二叉树的遍历也可以用栈来实现

前序遍历

前序遍历顺序是 中左右 ,每次先处理的是根结点,其次加入右结点和左结点。

//利用栈实现
public static void preOrderRecur2(Node root) {
        if (root == null) {
            return;
        }
        Stack<Node> stack = new Stack<Node>();
        stack.push(root);
        while (!stack.isEmpty()) {
            Node temp = stack.pop();
            System.out.println(temp.val);
            if (temp.right != null) {
                stack.push(temp.right);
            }
            if (temp.left != null) {
                stack.push(temp.left);
            }
        }
    }

中序遍历

中序遍历的顺序树 左中右

public static void midOrderRecur3(Node root){
        Node temp = root;
        Stack<Node> stack = new Stack<>();
        while (!stack.isEmpty() || temp != null){
            while(temp != null){
                stack.push(temp);
                temp = temp.left;
            }
            if(stack!=null){
                temp = stack.pop();
                System.out.println(temp.val);
                temp = temp.right;
            }
        }

    }

后序遍历

后续遍历的顺序为 左右中 ,利用前序遍历的顺序是中左右 变为中右左放在另一个栈中倒序输出即可

public static void postOrderRecur2(Node root) {
        Stack<Node> stack1 = new Stack<>();
        Stack<Node> stack2 = new Stack<>();
        stack1.push(root);
        while (!stack1.isEmpty()) {
            Node temp = stack1.pop();
            stack2.push(temp);
            if(temp.left!=null){
                stack1.push(temp.left);
            }
            if(temp.right!=null){
                stack1.push(temp.right);
            }
        }
        while (!stack2.isEmpty()) {
            System.out.println(stack2.pop().val);
        }
    }

二叉树的迭代遍历

原文:https://www.cnblogs.com/nj123/p/14611831.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!