本博文源于数据结构第八次实验,我们先看实验内容,再看具体实现细节
实验八内容
写程序实现算法5.1 5.3 5.5 5.6,
实验八相关算法
5.1 中序遍历的递归算法
先访问左子树,打印,在访问右子树。if(T)是判断树是否为空了,如果本身子树为空,或者递归达到最底层那就空了
5.3 先序遍历顺序建立二叉树
这里不要忘记char ch
5.5 二叉树的深度
这里要int m与n
5.6 统计二叉树各结点的个数
这里没有需要注意的点
测试
我想要创建的树是
ABC##DE#G##F###
最后的结果是:
最后:完整源码
//dev c++ 6.3 running
#include<iostream>
using namespace std;
typedef char TElemType ;
typedef struct BiTNode{
TElemType data; //data
struct BiTNode *left,*right;//left and right child
}BiTNode,*BiTree;
//5.1 algorithm
void InOrderTraverse(BiTree T){
if(T){
InOrderTraverse(T->left); //visit l child
cout << T->data; //visit data
InOrderTraverse(T->right); //visit R child
}
}
//5.3 algorithm
void CreateBiTree(BiTree &T){
char ch;
cin >> ch;
if(ch=='#') T=NULL; //create empty tree
else{
T = new BiTNode; //new root
T->data = ch; // data
CreateBiTree(T->left); //create left tree
CreateBiTree(T->right); //create right tree
}
}
//5.5
int Depth(BiTree T){
if(T==NULL) return 0; //empty deepth 0
else{
int m = Depth(T->left); //count left child's deepth
int n = Depth(T->right); //count right child's deepth
return m>n?(m+1):(n+1);
}
}
//5.6
int NodeCount(BiTree T){
//T count node
if(T==NULL) return 0;//empty,node is 0
else return NodeCount(T->left)+NodeCount(T->right)+1;
//left node add right node + right;
}
int main(){
BiTree T=new BiTNode;
CreateBiTree(T);
InOrderTraverse(T);
cout << endl << "Depth:" << Depth(T);
cout << endl << "NodeCount:" << NodeCount(T);
return 0;
}