#include <bits/stdc++.h>
#define MAXSIZI 10
/*
1、以二叉链表表示二叉树,建立一棵二叉树
2、输出二叉树的中序遍历结果
3、输出二叉树的前序遍历结果
4、输出二叉树的后序遍历结果
5、计算二叉树的深度
6、统计二叉树的结点个数
7、统计二叉树的叶结点个数;
*/
using namespace std;
//以二叉链表表示二叉树,建立一棵二叉树
typedef struct Node
{
char data;
Node *lchild,*rchild;
}BiTNode,*BiTree;//*BiTree 指向结构体的指针
//先序递归建立二叉树
void CreatBiTree(BiTree &T){
char c; cin >> c;
if(c == '#')
T = NULL;
else{
T = (BiTNode*)malloc(sizeof(BiTNode));
T -> data = c;
CreatBiTree(T-> lchild);
CreatBiTree(T -> rchild);
}
}
//中序遍历
void midGetData(BiTree T)
{
if(T)
{
midGetData(T -> lchild);
cout << T -> data;
midGetData(T -> rchild);
}
}
//后序遍历
void lastGetData(BiTree T)
{
if(T)
{
midGetData(T -> lchild);
midGetData(T -> rchild);
cout << T -> data;
}
}
//树的深度
int GetDepth(BiTree T)
{
if(T == NULL)
return 0;
int m = GetDepth(T -> lchild);
int n = GetDepth(T -> rchild);
if(m > n)
return m+1;
return n+1;
}
//统计二叉树中结点的个数
int GetNodeCount(BiTree T)
{
if(T == NULL)
return 0;
return GetNodeCount(T -> lchild) + GetNodeCount(T -> rchild) + 1;
}
//统计二叉树中叶结点的个数
int GetNodeCount_ye(BiTree T)
{
if(T == NULL)
return 0;
//如果该节点没有左子树和右子树 则是叶节点
if(T -> lchild==NULL&&T -> rchild==NULL)
{
return 1;
}else{
return GetNodeCount_ye(T -> lchild) + GetNodeCount_ye(T -> rchild);
}
}
int main()
{
BiTree T;
cout <<"先序遍历输入(以#结束):";
CreatBiTree(T);
cout <<"中序遍历结果:";
midGetData(T);
cout <<"\n后序遍历结果:";
lastGetData(T);
cout << endl;
int Depth = GetDepth(T);
cout << "树的深度为:" << Depth << endl;
int TreeNodeCount = GetNodeCount(T);
cout << "树的节点数为:" << TreeNodeCount << endl;
cout << "树的叶子节点为:"<<GetNodeCount_ye(T)<<endl;
return 0;
}
【数据结构】二叉树的链式储存以及基本操作
最新推荐文章于 2024-09-25 21:57:34 发布