数据结构(十四) 线索二叉树讲解(不带头节点中序加线索) 以及实现的完整代码

中序线索话何上一篇博客的前序加线索化思路是一样的。

下面是实现的代码:

//为二叉链表加中序线索化 (不带头节点)
#include <iostream>

using namespace std;
//线索化的结构体 
typedef struct Node
{
	char data;
	int ltag;
	int rtag;
	struct Node *lchild;
	struct Node *rchild;		
}*BiTree;
//pre为前驱节点。为全局变量 ,初始化时右子树为空 
BiTree pre;
//中序实现创建二叉树 
void createBiTree(BiTree &Tree)
{
	char data;
	cin>>data;
	if(data=='#')
	{
		Tree = NULL;
	}
	else
	{
		
		Tree = new Node();
		Tree->data = data;	
		Tree->ltag = 0;
		Tree->rtag=0;
		createBiTree(Tree->lchild);			
		createBiTree(Tree->rchild);	
	}
}
//中序线索化的实现
void function(BiTree &Tree)
{
	if(Tree)
	{
		function(Tree->lchild);
			
		if(Tree->lchild==NULL)
		{
			Tree->ltag=1;
			Tree->lchild=pre;
		}
		if(pre->rchild==NULL)
		{
			pre->rtag=1;
			pre->rchild=Tree;
		}
		pre = Tree;	

		function(Tree->rchild);

		
	}
}
//中序遍历  左根右 
void preBiTree(BiTree Tree)
{
	if(Tree==NULL)
	{
		cout<<"是空数\n";
		exit(1);
	}
	while(Tree!=NULL)
	{
		while(Tree!=NULL&&Tree->ltag==0)
		{
			Tree = Tree->lchild;
		}
		cout<<Tree->data<<" ";
		while(Tree!=NULL&&Tree->rtag==1)
		{
			Tree = Tree->rchild;
			cout<<Tree->data<<" ";
			
		}
		Tree=Tree->rchild;
	}
} 
int main()
{
	BiTree Tree;
	cout<<"请输入你要创建的二叉树的数据(按先序遍历创建的二叉树#为空节点的表示)\n";
	createBiTree(Tree);
	pre = new Node();
	pre->lchild=NULL; 
	function(Tree);
	preBiTree(Tree);
	return 0;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值