穿线二叉树
来源:互联网 发布:iphoto 7 for mac 编辑:程序博客网 时间:2024/06/02 10:08
#include<stdio.h>#include<stdlib.h>#include<malloc.h>typedef char type;typedef struct node{ type data; int ltag,rtag; struct node *lchild,*rchild;}binthrnode;typedef binthrnode *binthrtree;binthrtree pre=NULL;//前序遍历创建一棵二叉树binthrtree createbintree(){ char ch; binthrtree t; if((ch=getchar())=='#') t=NULL; else { t=(binthrnode*)malloc(sizeof(binthrnode)); t->data=ch; t->lchild=createbintree(); t->rchild=createbintree(); } return t;}//将普通二叉树进行中序线索化void inthreading(binthrtree *p){ if(*p) { inthreading(&(*p)->lchild);//中序线索化左子树 (*p)->ltag=((*p)->lchild)?0:1;//根据左子树调整左标记 (*p)->rtag=((*p)->rchild)?0:1;//根据右子树调整右标记 if(pre)//如果存在前驱 { if(pre->rtag==1)pre->rchild=*p; //如果前驱的右子树不存在,则将其右指针连接到当前树 if((*p)->ltag==1)(*p)->lchild=pre; //如果当前树的左子树不存在,则将当前树的左指针指向前驱 } pre=*p;//更新前驱 inthreading(&(*p)->rchild);//中序线索化右子树 }}//创建中序穿线二叉树void createthrtree(binthrtree *p){ *p=createbintree(); inthreading(p);}//求中序遍历线索二叉树中节点p的后继节点binthrtree insuccnode(binthrtree p){ binthrtree q; if(p->rtag==1)//如果正好存在后继位置,则返回后继 return p->rchild; else { q=p->rchild;//按照中序遍历顺序,当前节点的后继应该为 //其右子树的最左下的节点 while(q->ltag==0) q=q->lchild; return q; }}void inthrtree(binthrtree p){ if(p) { while(p->ltag==0)//找到中序遍历下第一个节点 //即:最左下位置 p=p->lchild; do { printf("%d\n",p->data); p=insuccnode(p);//循环它的后继节点 } while(p); }}
0 0
- 穿线二叉树
- 穿线二叉树
- 二叉树的递归穿线实现
- 穿线二叉树(注释了一些有用的解释)
- 二叉搜索树(二叉穿线树)抽象结构以及线索化算法
- 对称序穿线树的实现
- 穿线树实现无限级分类
- MYSQL使用总结穿线
- 穿线测试特性
- 网球穿线、拉线方法简介
- 费德勒球拍穿线背后的秘密
- 穿线测试理念介绍V1.0版
- 穿线测试理念介绍V1.0版
- 临时笔记,关于穿线...待整理
- 二叉树、二叉堆
- ThreadingTest(穿线测试)引领白盒测试进入工业界
- 二叉树
- 二叉树
- hadoop 1.x 伪分布式搭建
- 如何用两个栈实现一个队列
- 泛型
- java读写windows注册表
- Unity3D游戏引擎最详尽基础教程
- 穿线二叉树
- 【Erlang】gen_event
- android适配dimens.xml
- 对url进行转换
- hdu 4681 String (LCS)
- asp.net 验证正则表达式
- java jar打包
- Dex动态加载的C语言部分
- Git Bash常用命令