非递归实现二叉树的遍历

今天再讨论一下二叉树,时隔将近一个月,二叉树操作基本上又忘光了。。。- -!
那么实现递归的二叉树,就是不断的去寻找子树中的元素,

前序遍历就是中间节点->左子树->右子树

那么用递归的方法去实现这个前面的文章已经讲过了,在此不过多赘述~
非递归怎么实现呢?很多读者都知道栈这个数据结构吧,它是一种LIFO(Last In First Out)后进先出的数据结构,
所以我们可以这样来想,一个树,有左子树和右子树,
前序遍历

中->左->右

举个例子

			88
		55			99
44		 66		87		101

这是个二叉树
当我们新建个栈,首先88(root)进栈
当前栈就有个88,
88出栈
88的左右节点进栈,注意,栈这个节点是后进先出。
所以我们先将右节点压入栈内,99入栈,55入栈,
55出栈,55有左节点,44,66
66,44依次入栈,,
44出栈,44没有子节点
66出栈,66没有子节点,
此时栈中剩余99,99出栈,
101入栈,87入栈,
101出栈,87出栈。

我们再看个图
在这里插入图片描述
在这里插入图片描述
这两张图其实也很形象了,就是用栈的性质进行入栈和出栈操作。
具体代码如下

    public void preOrderNR(Node node) {
        if (node == null) {
            return;
        }

        Stack<Node> nodeStack = new Stack<Node>();
        nodeStack.push(node);
        while (!nodeStack.isEmpty()) {
            Node cur = nodeStack.pop();
            System.out.println(cur.e);
            nodeStack.push(cur.right);
            nodeStack.push(cur.left);
        }

    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值