数据结构之二叉树的非递归实现及“狡猾”的指针

先说说我实现二叉树的方法,才能开始讲述我被指针搞得晕头晕脑的痛苦经历。

/****************二叉树非递归的总体分析*****************/

(1)建立二叉树

栈的应用:用空格键表示空指针,我们利用栈来保存左右孩子指针未都被赋值的节点,空指针不允许入栈

开始建立:以循环遍历用户输入的字符串来建立二叉树,如:"AB#D##CE###"(这里先用#代替空格,方便查看)

我们以先序建立二叉树,按上面例子中的字符串建立的二叉树如下:


(visio不怎么会用,这图看着。。。忍耐一下)

从图中可以清晰的发现一个规律

字符串中,任意一个字符的前一个(即i-1)字符若不为空格的话,这个字符一定是前一个非空格字符的左子树

在由先序这个条件还可以发现,我们始终是从左向右建立子树的,所以,如果第i-1个字符为空格,第i个字符就

一定是前一个刚建立的子树的右子树

(2)遍历二叉树

栈的应用:我们从二叉树顶端开始走的时候,将未遍历的节点的数据入栈,遍历一个节点从栈中弹一个出来

中序遍历:我们采用中序遍历二叉树,在非递归算法中,根据中序的定义,我们也需要让第一个取得的头节点A

从右开始向下走,一直往右边走(途中遇到的节点依次入栈),直到走到第一个左子树为空的节点,这里显然是B,

然后访问B,然后B退栈,若B右指针非空,则遍历往右走一步(为空的时候下面讨论),然后B的右子树入栈,

继续循环以B的右子树为头节点走到最左端,直到把节点都走完,这里走到D 的时候就已经结束了,直接访问D&#

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值