博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【数据结构】二叉树的基本操作
阅读量:2026 次
发布时间:2019-04-28

本文共 2947 字,大约阅读时间需要 9 分钟。

#include "stdafx.h"

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

#define LEN sizeof(struct BTNode)

#define OK 1

#define ERROR 0

typedef int TElemType;

//用二叉链表表示二叉树

struct BTNode{

    TElemType data;

    TElemType num;

    structBTNode *lchild;

    structBTNode *rchild;

};

//返回结点数据函数

int Visit(int *p){

    printf("   %d",*p);

    returnOK;

}

//二叉树的层次顺序创建

int CreateTree(BTNode *T)

{

    inta[10];

    inti;

    BTNode *p,*q,*r,*s;

    printf("请按图示给二叉树的结点赋值(输入个整数依次赋给二叉树的~10号结点\n");

    for(i=0;i<10;i++)

       scanf("%d",&a[i]);

    {T->num=1;T->data=a[0];

    p=(structBTNode*)malloc(LEN);T->lchild=p;p->num=2;p->data=a[1];

    q=(structBTNode*)malloc(LEN);T->rchild=q;q->num=3;q->data=a[2];q->lchild=NULL;

    r=(structBTNode*)malloc(LEN);p->lchild=r;r->num=4;r->data=a[3];r->rchild=NULL;

    s=(structBTNode*)malloc(LEN);p->rchild=s;s->num=5;s->data=a[4];s->rchild=NULL;

    p=(structBTNode*)malloc(LEN);q->rchild=p;q->num=6;p->data=a[5];

    q=(structBTNode*)malloc(LEN);r->lchild=q;q->num=7;q->data=a[6];q->lchild=q->rchild=NULL;

    q=(structBTNode*)malloc(LEN);s->lchild=q;q->num=8;q->data=a[7];q->lchild=q->rchild=NULL;

    q=(structBTNode*)malloc(LEN);p->lchild=q;q->num=9;q->data=a[8];q->lchild=q->rchild=NULL;

    q=(structBTNode*)malloc(LEN);p->rchild=q;q->num=10;q->data=a[9];q->lchild=q->rchild=NULL;}

    printf("              您所建立的二叉树为:                                        \n");

    printf("                      %d                                            \n",a[0]);

    printf("                     | |                                                 \n");

    printf("                    |  |                                                \n");

    printf("                   %d     %d                                    \n",a[1],a[2]);

    printf("                  | |     |                                              \n");

    printf("                |   |    |                                             \n");

    printf("                %d     %d    %d                          \n",a[3],a[4],a[5]);

    printf("               |     |    | |                                           \n");

    printf("              |     |    |   |                                          \n");

    printf("             %d     %d    %d     %d                  \n",a[6],a[7],a[8],a[9]);

    returnOK;

}

 

   

 

 

//二叉树的中序遍历输出

int InOrderTraverse(BTNode *T)

{

    if(T)

    {InOrderTraverse(T->lchild);

    Visit(&T->data);

    InOrderTraverse(T->rchild);

    }

    returnOK;

}

 

 

 

 

//二叉树的结点查找输出

int SeekTree(BTNode *T,int x)

{

    BTNode *p=T;

    if(p)

    {

if(p->data==x)

    {printf("该数据所对应的结点编号为:\n%d\n",p->num);}

    SeekTree(T->lchild,x);

    SeekTree(T->rchild,x);}

    returnOK;

}

//二叉树的结点个数计算

int LeavesNum(BTNode *T)

{

    staticint i=0;

    if(T)

    {LeavesNum(T->lchild);

    i++;

    LeavesNum(T->rchild);

    }  

    returni;

}

//主函数

void main()

{

    BTNode *T;

    T=(structBTNode*)malloc(LEN);

    intx;

    intflag=1,select;

    printf("             给定二叉树的结构图为:                                       \n");

    printf("                       1                                                \n");

    printf("                      | |                                               \n");

    printf("                     |   |                                              \n");

    printf("                    2     3                                             \n");

    printf("                   | |     |                                             \n");

    printf("                  |   |    |                                           \n");

    printf("                 4     5    6                                          \n");

    printf("                |     |    | |                                          \n");

    printf("               |     |    |   |                                        \n");

    printf("              7     8    9     10                                       \n");

    printf("                                                                        \n");

    printf("====================菜单======================\n");

    printf("=           1.二叉树的层次顺序创建          =\n");

    printf("=           2.二叉树的中序遍历输出          =\n");

    printf("=           3.二叉树的结点查找输出          =\n");

    printf("=           4.二叉树的结点个数计算          =\n");

    printf("=           5.退出操作                      =\n");

    printf("================支持乱序选择==================\n");

    while(flag){

       printf("\n请选择菜单中的操作选项( 必须先选择“1”建立二叉树!建立之后再选择其他选项操作):\n");

       scanf("%d",&select);

       switch(select)

       {

       case1:

           CreateTree(T);break;

       case2:

           printf("按中序遍历输出的结果为:\n");

           InOrderTraverse(T);break;

       case3:

           printf("请输入要查找的数据:\n");

           scanf("%d",&x);

            SeekTree(T,x);break;

       case4:

           printf("\n结点个数为:\n%d\n",LeavesNum(T));break;

       case5:

           flag=0;break;

        default:printf("您输入的数据有误!\n");

       }

 

    }

   

}

 

转载地址:http://wsdaf.baihongyu.com/

你可能感兴趣的文章
[LeetCode] 234. 回文链表 ☆(翻转链表)
查看>>
Innodb中mysql如何快速删除2T的大表
查看>>
AM--消息队列
查看>>
Dubbo面试
查看>>
[LeetCode] 342. 4的幂 ☆(是否4 的幂)
查看>>
装饰器模式
查看>>
java关键字总结
查看>>
MyBatis:4
查看>>
List原理
查看>>
request请求中有点号
查看>>
根据Request获取真实客户端IP
查看>>
正、反向代理
查看>>
json格式化
查看>>
Tomcat性能调优
查看>>
数据库索引及其数据结构
查看>>
使用2个MR计算
查看>>
Linux,du、df统计磁盘情况不一致
查看>>
springmvc事务回滚失效
查看>>
Java 8的五大开发技巧
查看>>
多线程中的注意点
查看>>