数据结构学习——线索二叉树的遍历

在上一篇中我们已经将二叉树线索化,一个线索化了的二叉树,可以按照线索顺序采用非递归的方法将二叉树遍历。

具体思路如下:

按线索顺序遍历的关键在于怎么找到下一个结点顺利进入,要找下一个结点就要根据当前结点屁股上的线索来找。

观察可知rchild有两种指向:一种是指向后继的,rtag=1;

                                           一种是指向右孩子(该右孩子是右子树的根结点),rtag=0;

设p是当前结点,rchild指向后继的,p->rchild即下一号结点,直接找到;

                          rchild指向右孩子的,则当作新开了一棵树,p->rchild是右孩子(也是新树的根结点)此时必须找到新树的最左结点才是下一号结点,因此必须有一个找一棵树第一号结点(即最左结点)的功能来应对所有rchild指向右孩子的结点。


设计两个功能函数:

1.返回当前结点的下一号结点保证按顺序遍历

ThreadNode *NextNode(ThreadNode *p){
	if(rtag==0)
		return FirstNode(p->rchild);
	else
		return p->rchild;
}

C++复习:ThreadNode *NextNode()表示这个函数返回ThreadNode型指针


2.现有以当前结点为根的新树,返回该树的一号结点

ThreadNode *FirstNode(ThreadNode *p){
	while(p->ltag==0)
		P=P->lchild;
	return p;
}

主函数为:

void Inorder(ThreadNode *T){
	for(ThreadNode *p=FirstNode(T);p!=NULL;p=NextNode(p))
		visit(p);
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值