二叉树的基本运算
2015-07-30 10:43
260 查看
#include <iostream> #include <cstdlib> using namespace std; #define datatype char typedef struct node { datatype data; struct node *lchild; struct node *rchild; }*bitree,binode; /*二叉树*/ void initbitree(bitree *T) { *T=NULL; } void destroybitree(bitree *T) /*二维指针*/ { if(*T) /*如果是非空二叉树*/ { if((*T)->lchild) destroybitree(&((*T)->lchild)); if((*T)->rchild) destroybitree(&((*T)->rchild)); free(*T); *T=NULL; } } void creatbitree(bitree *T) { datatype ch; /*递归创建二叉树*/ cin>>ch; if(ch=='#') /*表示该处不生成结点*/ *T=NULL; else { *T=new binode; if(!(*T)) exit(-1); (*T)->data=ch; creatbitree(&((*T)->lchild)); /*构造左子树*/ creatbitree(&((*T)->rchild)); /*构造右子树*/ } } int insertleftchild(bitree p,bitree c) /*二叉树的左插入*/ { if(p) { c->rchild=p->lchild; /*将c子树插入到T中,使得c成为p的做子树*/ p->lchild=c; /*p的左子树成为c的右子树*/ return 1; } return 0; } int insertrightchild(bitree p,bitree c) /*二叉树的右插入*/ { if(p) { c->rchild=c->lchild; p->rchild=c; return 1; } return 0; } bitree point(bitree T,datatype e) /*查找元素为e的结点的指针*/ { bitree q[1000]; int front=0,rear=0; /*头节点不存储元素*/ binode *p; if(T) { q[rear]=T; rear++; while(front!=rear) /*利用队列查找*/ { p=q[front]; front++; if(p->data==e) return p; if(p->lchild) q[rear++]=p->lchild; if(p->rchild) q[rear++]=p->rchild; } } return NULL; } datatype leftchild(bitree T,datatype e) /*返回二叉树结点左孩子元素值*/ { bitree p; if(T) { p=point(T,e); if(p&&p->lchild) return p->lchild->data; } return 0; } datatype rightchile(bitree T,datatype e) { bitree p; if(T) { p=point(T,e); /*寻找该节点*/ if(p&&p->rchild) return p->rchild->data; } return 0; } int deleteleftchild(bitree p) /*删除二叉树左子树的操作*/ { if(p) { destroybitree(&(p->lchild)); return 1; } return 0; } int deleterightchild(bitree p) /*删除右子树*/ { if(p) { destroybitree(&(p->rchild)); return 1; } return 0; } int main() { bitree T; initbitree(&T); creatbitree(&T); }
相关文章推荐
- 信驰达微信iBeacon摇一摇周边方案ibeacon蓝牙设备
- 接口的显示实现和隐式实现一点笔记
- 程序员必备技能
- UVALive 6800 The Mountain of Gold (bellman_ford判负环)
- json kit
- IBM MQ 使用指南
- js
- Java 代码调用 Android studio mipmap图片资源
- Java:String和Date、Timestamp之间的转换
- ThreadLocal类
- 图的邻接表的表示方法
- nginx源码安装
- XHTML
- C#中out和ref之间的区别
- linux CentOS安装telnet
- oracle job 定时执行参数
- 英语总结
- Unix系统中的系统调用和库调用
- hibernate4.3.10环境搭建
- TCP三次握手以及四次挥手图解