数据结构第七章 实验题1 实现二叉树的各种基本运算的算法
2019-04-27 18:13
567 查看
版权声明:若转载,请附上原文链接 https://blog.csdn.net/Simons24/article/details/89603431
实验题目:
实现二叉树各种基本运算的算法
实验目的:
领会二叉链存储结构和掌握二叉树中各种基本运算算法设计
实验内容:
编写一个程序btree.cpp,实现二叉树的基本运算,在此基础上,编写exp7-1.cpp,完成如下功能:
1、由二叉树创建对应的二叉链存储结构b,该二叉树的括号表示串为 "A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))"。
2、输出二叉树b
3、输出'H'结点的左、右孩子结点值
4、输出二叉树b的高度
5、释放二叉树b
btree.cpp如下:
[code]// // Created by liushihao on 19-4-26. // #include "iostream" #define Maxsize 100 using namespace std; typedef char ElemType; typedef struct node { ElemType data; struct node *lchild; struct node *rchild; }BTNode; void CreateBTree(BTNode * &b, char *str) //创造二叉树 { BTNode *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=(BTNode*)malloc(sizeof(BTNode)); 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 DestroyBtree(BTNode *&b) //销毁二叉树 { if(b!=NULL) { DestroyBtree(b->lchild); DestroyBtree(b->rchild); free(b); } } BTNode *FindNode(BTNode *b,ElemType x) { BTNode *p; if(b==NULL) { return NULL; } else if(b->data==x) { return b; } else { p=FindNode(b->lchild, x); if(p!=NULL) { return p; } else { return FindNode(b->rchild, x); } } } BTNode *LchildNode(BTNode *p) { return p->lchild; } BTNode *RchildNode(BTNode *p) { return p->rchild; } int BTHeight(BTNode *b) { int lchildh,rchildh; if(b==NULL) return 0; else { lchildh=BTHeight(b->lchild); rchildh=BTHeight(b->rchild); return (lchildh>rchildh)? (lchildh+1):(rchildh+1); } } void DispBTree(BTNode *b) { if(b!=NULL) { cout<<b->data; if(b->lchild!=NULL || b->rchild!=NULL) { cout<<"("; DispBTree(b->lchild); if(b->rchild!= NULL) cout<<","; DispBTree(b->rchild); cout<<")"; } } }
exp7-1.cpp如下:
[code]#include "btree.h" int main() { BTNode *b; char str[]="A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))"; CreateBTree(b, str); cout<<"初始化二叉树为:"<<endl; DispBTree(b); cout<<endl; cout<<"H结点的左结点:"<<LchildNode(FindNode(b,'H'))->data<<" 右结点:"<<RchildNode(FindNode(b,'H'))->data<<endl; cout<<"二叉树的高度为:"<<endl; cout<<BTHeight(b)<<endl; DestroyBtree(b); return 0; }
相关文章推荐
- 数据结构实验2(二叉链表实现二叉树的基本运算)
- 实现二叉树各种基本运算的算法
- 实验题7.1: 编写一个程序algo7-1.cpp,实现二叉树的各种基本运算,并在此基础上设计一个程序Main.cpp完成如下功能(b为如下图所示的一棵二叉树)
- 实现二叉树的各种基本运算的算法
- 实验3_2 实现链栈各种基本运算的算法
- 实现二叉树各种基本运算的算法
- 数据结构之自建算法库——二叉树的链式存储及基本运算
- 数据结构之自建算法库——二叉树的链式存储及基本运算
- 实现环形队列各种基本运算的算法(用顺序结构)
- 数据结构 顺序表各种基本运算的实现
- 数据结构——算法之(043)(c++各种排序算法实现)
- 数据结构之二叉树的各种运算
- 数据结构与算法——表达式树类的C++实现(二叉树)
- 数据结构笔记(一)线性表的顺序表示和基本操作及其顺序表实现的集合运算(A-B)U(B-A)实例
- 数据结构.二叉树的基本操作(C语言实现)
- 二叉树各种基本运算的算法
- 实现顺序队列各种基本运算的算法
- 算法系列(七)数据结构之树的基本结构和二叉树的遍历
- 各种基本算法实现小结(三)—— 树与二叉树
- 数据结构实验一--单链表的基本操作的算法