二叉树及其相关操作
要求
代码实现
#include<iostream>
using namespace std;
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
struct TNode
{
char data;
TNode* left;
TNode* right;
};
typedef TNode* BinTree;
TNode* root = NULL;
void Visit(char x)
{
printf("%c ", x);
}
int GetHeight(BinTree BT)
{
int leftHeight, rightHeight, maxH;
if (BT) {
leftHeight = GetHeight(BT->left);
rightHeight = GetHeight(BT->right);
maxH = leftHeight >= rightHeight ? leftHeight : rightHeight;
return (maxH + 1);
}
return 0;
}
void LevelOrder( BinTree BT )
{
if(BT==NULL)return;
BinTree CC[10000];
CC[0]=BT;
int lens=1;
while(1)
{
if(lens==0)return;
int temp=0;BinTree TH[10000];
for(int i=0;i<lens;i++)
{
if(CC[i]!=NULL)
printf(" %c",CC[i]->data);
if(CC[i]->left!=NULL)
TH[temp++]=CC[i]->left;
if(CC[i]->right!=NULL)
TH[temp++]=CC[i]->right;
}
lens=temp;
for(int i=0;i<lens;i++)
CC[i]=TH[i];
}
}
void PostOrder(BinTree BT)
{
if (BT != NULL)
{
PostOrder(BT->left);
PostOrder(BT->right);
Visit(BT->data);
}
}
void InOrder(BinTree BT)
{
if (BT != NULL)
{
InOrder(BT->left); /* 中序遍历左子树 */
Visit(BT->data); /* 访问根结点 */
InOrder(BT->right); /* 中序遍历右子树 */
}
}
int sum(BinTree T) {
int cnt = 0;
if (T != NULL) {
cnt++;
cnt += sum(T->left);
cnt += sum(T->right);
}
return cnt;
}
BinTree CreateBT()
{
BinTree BT;
char item;
cin >> item;
if (item == '#') /* 数据为空数据用#代替,二叉树赋值为空 */
BT = NULL;
else
{
BT = new TNode;
BT->data = item;
BT->left = CreateBT(); /* 先序创建结点左子树 */
BT->right = CreateBT(); /* 先序创建结点右子树 */
}
return BT;
}
void PreOrder(BinTree BT)
{
if (BT != NULL)
{
Visit(BT->data); /* 访问根结点*/
PreOrder(BT->left); /*先序遍历左子树*/
PreOrder(BT->right); /* 先序遍历右子树*/
}
}
void menu() {
int n;
cout << "************二叉树及其相关操作************" << endl;
cout << "1.先序创建二叉树。" << endl;
cout << " 2.先序遍历二叉树。" << endl;
cout << " 3.中序遍历二叉树。" << endl;
cout << " 4.后序遍历二叉树。" << endl;
cout << " 5.层次遍历二叉树。" << endl;
cout << " 6.输出二叉树的高度。" << endl;
cout << " 7.统计二叉树结点个数。" << endl;
cout << " 0.退出系统。" << endl;
cout << "******************************************" << endl;
cin >> n;
switch (n) {
case 1: cout << "输入建立二叉树元素,#表示空数据\n" << endl;
root = CreateBT();
menu();
case 2: PreOrder(root);
cout << endl;
menu();
case 3:InOrder(root);
cout << endl;
menu();
case 4:PostOrder(root);
cout << endl;
menu();
case 5:LevelOrder(root);
cout << endl;
menu();
case 6:cout << "二叉树高度: " << GetHeight(root) << endl;
menu();
case 7:cout << "二叉树的节点" << sum(root) << endl;
menu();
case 0:exit(0); break;
}
}
int main() {
menu();
return 0;
}
//ABD##FE###CG#H##I##