栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构先序线索二叉树C语言

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构先序线索二叉树C语言

#include 
using namespace std;
#define Status int 
#define OK 1
#define ERROR 0
#define TElemType char
 
typedef enum{
	link,Thread
}PointerTag;
typedef struct BiThrNode{
	TElemType data;
	struct BiThrNode *lchild, *rchild; 
	PointerTag LTag , RTag;            
}BiThrNode, *BiThrTree;
 

char Vexch[26]={'A','B','D','H','$','$','I','$','$','E','J','$','$','$','C','F','$','$','G','$','$'};  
int i=0;  

Status CreatBiThrTree(BiThrTree &T) {  
    if(Vexch[i++]=='$') T=NULL;  
    else {  
        T= (BiThrTree)malloc(sizeof(BiThrNode)); 
        if(!T)  return 0;  
        T->data=Vexch[i-1];
		T->LTag=link; 
        CreatBiThrTree(T->lchild);
		T->RTag=link; 
        CreatBiThrTree(T->rchild); 
    }  
    return 1;  
}  

Status visit(TElemType e) {
	cout << e << " ";
	return OK;
}
 
BiThrTree pre;

void PreThreading(BiThrTree p) {
	if(p) {
		if(!p->lchild) {           
			p->LTag = Thread;    
			p->lchild = pre;     
		}
		if(!pre->rchild) {
			pre->RTag = Thread;  
			pre->rchild = p ;      
		}
		pre = p;
		if(p->LTag == link)
			PreThreading(p->lchild);   
		if(p->RTag == link)
			PreThreading(p->rchild); 
	}
}

Status PreOrderThreading(BiThrTree &Thrt,BiThrTree T) {
	if(!(Thrt = (BiThrTree)malloc(sizeof(BiThrNode)))) 
		return ERROR;
	
	Thrt->RTag = Thread;             
	Thrt->rchild = Thrt ;            
	Thrt->LTag = link;
	if(!T) {
		Thrt->lchild = Thrt;
	}
    else {
		Thrt->lchild = T; 
		pre = Thrt ;
		PreThreading(T); 
		pre->rchild = Thrt ; 
		pre->RTag = Thread; 
		Thrt->rchild = pre;
	}
	return OK;
}

Status PreOrderTraverse_Thr(BiThrTree T) {
	BiThrTree p ;
	p = T->lchild;        
	while(p != T) {          
		visit(p->data);  
		if(p->LTag == link)
			p = p->lchild;
		else 
			p = p->rchild;
	}
	return OK;
}

int main() {
	BiThrTree T, PreT;
	CreatBiThrTree(T);
	PreOrderThreading(PreT , T);
	PreOrderTraverse_Thr(PreT);
	cout << endl;
	return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/739481.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号