java----非递归遍历树

  1. 问题描述
    实现非递归遍历树
    ①先序
    ②中序
    ③后序遍历请点击此链接
    链接: link.
  2. 解决思路
    ①先序
    1> 特殊情况: 如果根为空, 直接返回
    2> 如果不为空树
    先将根节点压入栈中
    当栈不为空时, 进行循环
    弹出栈顶元素并输出, 然后将栈顶元素的右孩子先压入栈, 再压入左孩子 (因为栈是先进后出, 所以进行循环的时候就是左孩子先出栈.
    ②中序
    1> 特殊情况: 如果根为空, 直接返回
    2> 如果不为空树, 设置一个 cur 引用,使其指向树的根部.
    当栈不空或者 cur 不为空时, 进行循环
    如果 cur 不为空, 就将 cur 压栈, 并使 cur 指向它的左子树 cur = cur.left;
    否则就弹出栈顶元素并输出, 使 cur 指向它的右子树 cur = cur.right;
    直到栈为空且 cur 也为空, 说明所有节点都遍历完了.
// 如果不为空树, 设置一个 cur 引用,使其指向树的根部
TreeNode cur = root;

当栈不空和或者当前节点 (cur) 不空时)

// 当栈不空和或者当前节点 (cur) 不空时)
!stack.isEmpty() || cur != null;

将 粗人, 再将右孩子压入栈中,最后将左孩子压入栈中.
3. 源代码
①先序

public class PreTraversal {
    Deque<TreeNode> stack = new LinkedList<>();

    public void preTraversal1(TreeNode root) {
        if (root == null) {
            return;
        }
        this.stack.push(root);
        while (!this.stack.isEmpty()) {
            TreeNode node = this.stack.pop();
            System.out.print(node.var);
            if (node.right != null) {
                this.stack.push(node.right);
            }
            if (node.left != null) {
                this.stack.push(node.left);
            }
        }
    }
}

②中序

public class InTraversal {
    public void inTraversal1(TreeNode root) {
        TreeNode cur = root;
        Deque<TreeNode> stack = new LinkedList<>();
        if (root == null) {
            return;
        }
        while (!stack.isEmpty() || cur != null) {
            if (cur != null) {
                stack.push(cur);
                cur = cur.left;
            } else {
                cur = stack.pop();
                System.out.print(cur.var);
                cur = cur.right;
            }
        }
    }
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值