[基本要求]
- 根据输入字符串序列,使用二叉链表存储结构,按照先序优先方式编写二叉链表创建功能函数;
- 求取所创建的二叉树的深度;
- 按中序优先遍历顺序输出二叉树各结点数据
#include<iostream>
using namespace std;
typedef char TElemType;
//二叉链表的结点结构
typedef struct BiNode{
TElemType data; //定义数值
struct BiNode *lchild,*rchild; //定义左右指针
}BiTNode,*BiTree;
//用递归方法建立二叉链表
void CreateBiTree(BiTree &T){
//按先序次序输入二叉树中结点的值(一个字符)
//创建二叉链表表示的二叉树T
TElemType ch;
cin>>ch;
//递归结束,建立空树
if(ch == '#'){
T = NULL;
} else{
T = new BiNode;
T->data = ch; //生成根节点
CreateBiTree(T->lchild);//递归创建左子树
CreateBiTree(T->rchild); //递归创建右子树
}
}
//求二叉树T的深度
void HeightBiTree(BiTree T, int &height){
//递归方法计算二叉树T的深度,保存在height中
int m=0,n=0;
if(T == NULL){
height = 0;
}else{
HeightBiTree(T->lchild, m);//递归计算左子树,深度记为m
HeightBiTree(T->rchild, n);//递归计算右子树,深度记为n
if (m > n) {
m++;
height = m;
}else {
n++;
height = n;
}
}
}
//中序遍历的方式输出T中各元素
void InOrderTraverse(BiTree T){
//递归方法中序遍历二叉树各结点,并输出结点数据
//判断二叉树是否为空
if(T == NULL){
} else{
InOrderTraverse(T->lchild); //遍历左子树
cout<<T->data<<" "; //访问根节点
InOrderTraverse(T->rchild); //遍历右子树
}
}
int main(){
BiTree tree;
int height;
cout<<"请输入建立二叉树的序列:\n";
CreateBiTree(tree);
HeightBiTree(tree,height);
printf("二叉树的深度为:%d\n", height + 1);
InOrderTraverse(tree);
cout<<endl;
return 0;
}