二叉树的基本操作
来源:互联网 发布:思源物业软件 编辑:程序博客网 时间:2024/06/06 02:23
//二叉树的基本操作//递归实现#include <stdio.h>#include <stdlib.h>#include <string.h>//二叉树的二叉链表存储表示//二叉树的定义typedef char TElemType;typedef struct BiTNode{ TElemType data; struct BiTNode *lchild; struct BiTNode *rchild;} BiTNode,*BiTree;//二叉树的建立 先序构造int cnt;char str[100]; //结点上没有数据的用其他BiTree CreateBiTree() //符号代替,出现这种符号时{ //把树的节点的值赋为空 BiTree T; //先给树的各节点开空间 //再为它赋值;再依次建立左子树与右子树 if(str[cnt]== ',') //建树的时候,一个结点一个结点的建立 { T = NULL; cnt++; //每次进来一个字符作为结点的值 } else { T = (BiTree)malloc(sizeof(BiTNode)); T->data = str[cnt]; cnt++; T->lchild = CreateBiTree(); T->rchild = CreateBiTree(); } return T;}//先序遍历二叉树 //先判断树是否为空void PreOrderBiTree(BiTNode * T) //不为空的话就按次序{ //执行输出结点与 if(T != NULL) //遍历子树 { printf("%c",T->data); PreOrderBiTree(T->lchild); PreOrderBiTree(T->rchild); }}//中序遍历二叉树void InOrderBiTree(BiTNode * T){ if(T!=NULL) { InOrderBiTree(T->lchild); printf("%c",T->data); InOrderBiTree(T->rchild); }}//后序遍历二叉树void PostOrderBiTree(BiTNode * T){ if(T != NULL) { PostOrderBiTree(T->lchild); PostOrderBiTree(T->rchild); printf("%c",T->data); }}//求二叉树的深度int BiTreeDepth(BiTNode * T){ int Depth,ldepth,rdepth; if(T == NULL) Depth = 0; else { ldepth = BiTreeDepth(T->lchild); rdepth = BiTreeDepth(T->rchild); Depth = 1+(ldepth > rdepth ? ldepth : rdepth); } return Depth;}//求叶结点的个数int CountLeaf(BiTNode * T){ int m,n; if(T == NULL) { return 0; } if(T->lchild == NULL&&T->rchild == NULL) { return 1; } else { m = CountLeaf(T->lchild); n = CountLeaf(T->rchild); return (m + n); } return 0;}//求叶结点个数2/*int CountLeaf(BiTNode * T){ int count = 0; if(T == NULL) return 0; else { if(T->lchild == NULL&&T->rchild == NULL) { count++; } CountLeaf(T->lchild); CountLeaf(T->rchild); } return count;}*///查询二叉树中某结点TElemType FindBiTree(BiTNode * T,char ch){ char a[30],b[30]; strcpy(a,"TRUE"); strcpy(b,"FALSE"); if(T == NULL) return b[30]; else { if(T->data == ch) { return a[30]; } else { FindBiTree(T->lchild,ch); FindBiTree(T->rchild,ch); } } return b[30];}
void CengTravel(BiTree T)//非队列{ BiTree temp[100]; int par = 0,chi = 1; temp[par] = T; //不能只将T的data赋给temp,不然指针会乱掉 while(temp[par] != NULL) { printf("%c",temp[par]->data); if(temp[par]->lchild != NULL) { temp[chi] = temp[par]->lchild;//->data //temp存的是树的结点 chi++; } if(temp[par]->rchild != NULL) { temp[chi] = temp[par]->rchild; chi++; } par++; if(par == chi) break; } printf("\n");}void CengTravel(BiTree root,LinkQueue * Q)//队列实现层序遍历{ EnQueue(Q,root); // printf("%c",Q->front->next->T->data); QueuePtr p; while(Q->front->next!=NULL) { p = Q->front->next; printf("%c",p->T->data); if(p->T->lchild != NULL) { EnQueue(Q,p->T->lchild); } if(p->T->rchild != NULL) { EnQueue(Q,p->T->rchild); } DeQueue(Q);} printf("\n");}int main(){ while(scanf("%s",str)!=EOF) { BiTree T; cnt = 0; T = CreateBiTree(); //PreOrderBiTree(&T); InOrderBiTree(T); printf("\n"); PostOrderBiTree(T); printf("\n"); } return 0;}
阅读全文
0 0
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- 二叉树的基本操作
- EM算法
- Apple Pay开发 申请MerchantID详细介绍
- 20行python代码——爬取知乎神回复
- luogu P2258 子矩阵
- 【JVM】6_GC存活分析算法之引用计数法的优缺
- 二叉树的基本操作
- git下载github分支代码的部分文件
- 在 springMVC 项目中,获取文件并上传
- 洛谷1613 跑路【倍增+floyd】
- 如何解决:无法导入密钥文件“XXX.pfx”。密钥文件可能受密码保护。
- 有return的情况下try catch finally的执行顺序
- HTML5语义元素
- oracle数据库基本操作
- 大数据相关学习资料