数据结构大作业(关于二叉树)

二叉树及其相关操作

要求

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码实现

#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##

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值