二叉树的链式存储与实现(C++)
来源:互联网 发布:加拿大28百分百中算法 编辑:程序博客网 时间:2024/05/18 12:30
二叉链表存储结构的类型定义如下:
typedef struct Node{DataType data;struct Node *lchild;struct Node *rchild;}*BiTree,BitNode;
二叉树的基本运算:
(1)二叉树的初始化操作。
二叉树的初始化需要将指向二叉树的根结点指针置为空。
void InitBitTree(BiTree *T){*T=NULL;}
(2)二叉树的销毁操作。
void DestroyBitTree(BiTree *T){if (*T){if ((*T)->lchild){DestroyBitTree(&((*T)->lchild));}if ((*T)->rchild){DestroyBitTree(&((*T)->rchild));}free(*T);*T=NULL;}}(3)创建二叉树操作。
根据二叉树的递归定义,先生成二叉树的根结点,将元素值赋值给结点的数据域,然后递归创建左子树和右子树。
void CreateBitTree(BiTree *T){DataType ch;scanf("%c",&ch);if (ch=='#'){*T=NULL;} else{*T=(BiTree)malloc(sizeof(BitNode));//生成根结点if (!(*T)){exit(-1);}(*T)->data=ch;CreateBitTree(&((*T)->lchild));//构造左子树CreateBitTree(&((*T)->rchild));//构造右子树}}(4)二叉树的左插入操作。
指针p指向二叉树T的某个结点,将子树c插入到T中,使c成为p指向结点的左子树,p指向结点的原来左子树成为右子树。
int InsertLeftChild(BiTree p,BiTree c){if (p){c->rchild=p->lchild;p->lchild=c;return 1;}return 0;}
(5)二叉树的右插入操作。
指针p指向二叉树T的某个结点,将子树c插入到T中,使c成为p指向结点的右子树,p指向结点的原来右子树成为右子树。
int InsertRightChild(BiTree p,BiTree c){if (p){c->rchild=p->rchild;p->rchild=c;return 1;}return 0;}
(6)返回二叉树结点的指针操作。
在二叉树中查找指向元素值为e的结点,如果找到该结点,则返回该结点的指针,否则,返回NULL。
BiTree Point(BiTree T,DataType e){BiTree Q[MaxSize];//定义一个队列,用于存放二叉树中结点的指针int front=0,rear=0;//初始化队列BitNode *p;if (T){Q[rear]=T;rear++;while(front==rear)//如果队列非空{p=Q[front++];//取出队头指针,并出队if (p->data==e){return p;}if (p->lchild)//如果左孩子结点存在,将左孩子结点入队{Q[rear++]=p->lchild;}if (p->rchild)//如果右孩子结点存在,将右孩子结点入队{Q[rear++]=p->rchild;}}}return NULL;}
(7)返回二叉树结点的左孩子元素值操作。
如果元素值为e的结点存在,并且该结点的左孩子结点存在,则将该结点的左孩子结点的元素值返回。
DataType LeftChild(BiTree T,DataType e){BiTree p;if (T){p=Point(T,e);if (p&&p->lchild){return p->lchild->data;}}return;}
(8)返回二叉树结点的右孩子元素值操作。
如果元素值为e的结点存在,并且该结点的右孩子结点存在,则将该结点的右孩子结点的元素值返回。
DataType RightChild(BiTree T,DataType e){BiTree p;if (T){p=Point(T,e);if (p&&p->rchild){return p->rchild->data;}}return;}
(9)二叉树的左删除操作。
在二叉树中,指针p指向二叉树的某个结点,将p所指向的结点的左子树删除。
int DeleteLeftChild(BiTree p){if (p){DestroyBitTree(&(p->lchild));return 1;}return 0;}
(10)二叉树的右删除操作。
在二叉树中,指针p指向二叉树的某个结点,将p所指向的结点的右子树删除。
int DeleteRightChild(BiTree p){if (p){DestroyBitTree(&(p->rchild));return 1;}return 0;}
0 0
- 二叉树的链式存储与实现(C++)
- 二叉树链式存储的C实现
- 二叉树链式存储的实现
- 二叉树链式存储的实现
- 数据结构:二叉树的链式存储实现
- 二叉树的链式存储实现
- 二叉树的链式存储实现
- 二叉树的建立(链式存储)
- 二叉树的链式存储
- 二叉树的链式存储
- 二叉树的链式存储
- 二叉树的链式存储
- 二叉树的链式存储
- 二叉树的链式存储
- 二叉树的链式存储
- 二叉树的链式存储
- 二叉树(二叉链式存储)8种基本操作的实现
- 二叉树的顺序存储和链式存储结构(java实现)
- virtualbox 中主机的上网设置
- J2EE——2014.5.24
- LeetCode OJ - Gas Station
- strong and weak 强引用和弱引用的区别
- C/C++ 内存分配方式,堆区,栈区,new/delete/malloc/free
- 二叉树的链式存储与实现(C++)
- 全国大中学生体测取消选测 长跑成为必测项目
- 怎样让吐司机器中三个任务相互协作
- lua 之newlabel
- poj 3258-River Hopscotch
- Python集合(set)类型的操作
- mysql中“Table ‘’ is read only”的解决办法
- 织梦如何调用文件保存目录名
- 2014年在美国上市的中国企业名单(截止2014年10月17日)