第十一周项目3 中序线索化二叉树算法
来源:互联网 发布:淘宝双十一促销方案 编辑:程序博客网 时间:2024/06/02 04:47
/* 02.*Copyright (c) 2015,烟台大学计算机学院 03.*All rights reserved. 04.*文件名称:cengcibianli.cpp 05.*作者:孙钦达 06.*完成日期:2015年11月27日 07.*版本号:vc++6.0 08.* 09.*问题描述:线索二叉树 10.*输入描述:无 11.*程序输出:二叉树12.*/
#ifndef HEAD_H_INCLUDED#define HEAD_H_INCLUDED#define MaxSize 100#include<stdio.h>#include<malloc.h>typedef char ElemType;typedef struct node{ ElemType data; int ltag,rtag; struct node *lchild; struct node *rchild;<pre class="cpp" name="code">#include "head.h"TBTNode *pre;void CreateTBTNode(TBTNode * &b,char *str){ TBTNode *St[MaxSize],*p; int top=-1,k,j=0; char ch; b=NULL; ch=str[j]; while(ch!='\0') { switch(ch) { case '(': top++; St[top]=p; k=1; break; case ')': top--; break; case ',': k=2; break; default: p=(TBTNode *)malloc(sizeof(TBTNode)); p->data=ch; p->lchild=p->rchild=NULL; if(b==NULL) b=p; else { switch(k) { case 1: St[top]->lchild=p; break; case 2: St[top]->rchild=p; break; } } } j++; ch=str[j]; }}void DispTBTNode(TBTNode *b){ if(b!=NULL) { printf("%c",b->data); if(b->lchild!=NULL||b->rchild!=NULL) { printf("("); DispTBTNode(b->lchild); if(b->rchild!=NULL) printf(","); DispTBTNode(b->rchild); printf(")"); } }}void Thread(TBTNode *&p){ if (p!=NULL) { Thread(p->lchild); //左子树线索化 if (p->lchild==NULL) //前驱线索 { p->lchild=pre; //建立当前结点的前驱线索 p->ltag=1; } else p->ltag=0; if (pre->rchild==NULL) //后继线索 { pre->rchild=p; //建立前驱结点的后继线索 pre->rtag=1; } else pre->rtag=0; pre=p; Thread(p->rchild); //右子树线索化 }}TBTNode *CreaThread(TBTNode *b){ TBTNode *root; root=(TBTNode *)malloc(sizeof(TBTNode)); root->ltag=0; root->rtag=1; root->rchild=b; if(b==NULL) root->lchild=root; else { root->lchild=b; pre=root; Thread(b); pre->rchild=root; pre->rtag=1; root->rchild=pre; } return root;}void ThInOrder(TBTNode *tb){ TBTNode *p=tb->lchild; while (p!=tb) { while (p->ltag==0) p=p->lchild; printf("%c ",p->data); while (p->rtag==1 && p->rchild!=tb) { p=p->rchild; printf("%c ",p->data); } p=p->rchild; }}
}TBTNode;void CreateTBTNode(TBTNode * &b,char *str);//建立二叉树void DispTBTNode(TBTNode *b);//输出二叉树void Thread(TBTNode *&p);//线索化TBTNode *CreaThread(TBTNode *b);//线索化二叉树void ThInOrder(TBTNode *tb);//中序遍历#endif // HEAD_H_INCLUDED
#include "head.h"int main(){ TBTNode *b,*tb; CreateTBTNode(b,"A(B(D(,G)),C(E,F))"); printf(" 二叉树:"); DispTBTNode(b); printf("\n"); tb=CreaThread(b); printf(" 线索中序序列:"); ThInOrder(tb); printf("\n"); return 0;}
运行结果:
知识点总结:
在线索二叉树中,节点的左指针为空(1)-----该指针指向该节点的前驱节点;节点右指针为空(1)-----该指针指向该节点的后继节点。
0 0
- 第十一周项目1 验证算法(3) 中序线索化二叉树算法
- 第十一周项目1 算法验证3中序线索化二叉树的算法验证
- 第十一周 项目1-验证算法(3)中序线索化二叉树的算法
- 第十一周项目3中序线索化二叉树的算法验证
- 第十一周 项目一(3) 中序线索化二叉树的算法验证
- 第十一周项目3 中序线索化二叉树算法
- 第十一周 项目一(3)-中序线索化二叉树的算法验证
- 第十一周 项目1-3 中序线索化二叉树的算法验证
- 第十一周项目3 中序线索化二叉树算法
- 第十一周项目1-(3)中序线索化二叉树的算法验证
- 第十一周项目1--(3)中序线索化二叉树的算法验证
- 第十一周项目1-(3)中序线索化二叉树的算法
- 第十一周 项目1-(3)中序线索化二叉树的算法
- 第十一周 项目1(3)中序线索化二叉树的算法验证
- 第十一周项目1(3)中序线索化二叉树的算法验证
- 第十一周【项目一-(3)中序线索化二叉树的算法验证】
- 第十一周项目1(3)-中序线索化二叉树的算法验证
- 第十一周项目3-中序线索化二叉树的算法
- 第十三周项目1—Prim算法的
- <select>里动态添加option
- test
- 第13周项目3 Dijkstra算法的验证
- (第十二周项目1)图基本算法库
- 第十一周项目3 中序线索化二叉树算法
- 【模板】字符串算法-字符串最小表示法
- 十四周 项目三-是否二叉排序树
- 第十周 项目3-利用二叉树遍历思想解决问题
- 第十四周项目1-(1)验证折半查找算法
- (第十二周项目2)操作用邻接表存储的图
- 第八周:串的链式存储
- 第十三周项目3-Dijkstra算法的验证
- 第十四周 项目1-验证算法(4)