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

原创 2017年01月02日 14:45:10

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

下面是实现的代码:

//为二叉链表加中序线索化 (不带头节点)
#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;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

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

这篇博客主要讲解的是中序线索化的基础上加上头节点(前序类似),这样做的好处是可以让所有的指针都不为空(即都有指向)。 下篇博客主要讲解后序加上线索化,这个有一定的难度。 实现的代码如下:...

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

引用线索二叉树的目的 因为二叉链表中,假设有n个节点,指针指向为空的指针有n+1个,为了利用这些指针,引入了线索化的概念,而且为二叉链表加入线索化后,对二叉树的遍历便的很方便。 加线索化分为:前序线索...

数据结构--树--线索二叉树(中序,前序,后序)

线索二叉树 在遍历二叉树的时候,会有许多空指针域,这些空间不存储任何事物,白白浪费了内存的资源。 那么在做遍历的时候,提前记录下每个结点的前驱和后继,这样就更加节约了时间。              ...

一步一步复习数据结构和算法基础-中序线索二叉树

#include #include typedef struct tree { int data; struct tree *lchild,*rchild; int lflag,rflag;...

数据结构之线索二叉树的前序,中序和后序遍

二叉树是一种非线性结构,在之前实现的二叉树遍历中不管是递归还是非递归用二叉树作为存储结构时只能取到该结点的左孩子和右孩子,不能得到该结点的前驱和后继。为了保存这种在遍历中需要的信息,同时也为了充分利用...

数据结构 线索二叉树

  • 2014年04月27日 15:06
  • 1.36MB
  • 下载

【数据结构基础】前序、中序、后序线索化二叉树(非递归实现)

前言: 花了整整一天时间写完了二叉树的线索化的递归实现和非递归实现。目的有两个: 一是 熟悉树的递归和非递归遍历。 二是 琢磨琢磨递归方法。 在写的过程中发现网上很少有线索二叉...

数据结构——线索二叉树排序

  • 2010年07月16日 23:27
  • 937B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据结构(十四) 线索二叉树讲解(不带头节点中序加线索) 以及实现的完整代码
举报原因:
原因补充:

(最多只允许输入30个字)