二叉树的递归和迭代遍历模板

// 先序,递归
public void preorderTraversal(TreeNode root) {
        if (root == null) {
            return;
        }

        /*用root在这里写业务代码*/

        preorderTraversal(root.left);
        preorderTraversal(root.right);
    }


// 先序,迭代
public void preorderTraversal(TreeNode root) {
        Stack<TreeNode> stack = new Stack<>();
        while (root != null || !stack.isEmpty()) {
            while (root != null) {
                stack.push(root);

                /*用root在这里写业务代码*/

                root = root.left;
            }
            root = stack.pop();
            root = root.right;
        }
    }


// 中序,递归
public void inorderTraversal(TreeNode root) {
        if (root == null) {
            return;
        }
        inorderTraversal(root.left);

        /*用root在这里写业务代码*/

        inorderTraversal(root.right);
    }

// 中序,迭代
public void inorderTraversal(TreeNode root) {
        Stack<TreeNode> stack = new Stack<>();

        while (root != null || !stack.isEmpty()) {
            while (root != null) {
                stack.push(root);
                root = root.left;
            }
            root = stack.pop();

            /*用root在这里写业务代码*/

            root = root.right;
        }
    }

// 后序,递归
public void postorderTraversal(TreeNode root) {
        if (root == null) {
            return;
        }
        inorderTraversal(root.left);
        inorderTraversal(root.right);

        /*用root在这里写业务代码*/

    }

// 后序,迭代
public void postorderTraversal(TreeNode root) {
        Stack<TreeNode> stack = new Stack<>();
        TreeNode prev = null;
        while (root != null || !stack.isEmpty()) {
            while (root != null) {
                stack.push(root);
                root = root.left;
            }
            root = stack.pop();

            if (root.right == null || root.right == prev) {
                
                /*用root在这里写业务代码*/                

                prev = root;
                root = null;
            } else {
                stack.push(root);
                root = root.right;
            }
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值