c语言(二叉树的操作)

#include "stdio.h"
#include "malloc.h"
#include "stdlib.h"
typedef struct BTNode
{
    int data;
    struct BTNode *Lchild,*Rchild;
}BTree;
//初始化
BTree * Ini_BTNode()
{
    BTree *bt ;
    int a;
    bt=(BTree *)malloc(sizeof(BTree));
    printf("输入根节点:(0表示空树)\n");
    scanf("%d",&a);
    if(a==0)
    {
        printf("这是空树!");
        exit(0);
    }
    bt->data=a;
    bt->Lchild=NULL;  //左子树节点
    bt->Rchild=NULL;  //右子树节点
    return bt;
}
creat_BiTree(BTree *bt)//输入左子树
{

      int a;
      BTree *Node;
      printf("请输入%d节点的左孩子(0为空)\n",bt->data) ;
      scanf("%d",&a);
      if(a!=0)
      {
              Node=(BTree*)malloc(sizeof(BTree));
              Node->data=a;
              Node->Lchild=NULL;
              Node->Rchild=NULL;
              bt->Lchild=Node;
              creat_BiTree(bt->Lchild);

      }
      printf("请输入%d节点的右孩子(0为空)\n",bt->data) ; //输入右子树
      scanf("%d",&a);
      if(a!=0)
      {
              Node=(BTree *)malloc(sizeof(BTree));
              Node->data=a;
              Node->Lchild=NULL;
              Node->Rchild=NULL;
              bt->Rchild =Node;
              creat_BiTree(bt->Rchild);

      }

      return 0;

}
void PerOrderTraverse(BTree *bt) //先序遍历
{
    if(bt!=NULL)
   { printf("%d -->",bt->data);
     PerOrderTraverse(bt->Lchild);
     PerOrderTraverse(bt->Rchild);
   }
}
void InOrderTraverse(BTree *bt) //中序遍历
{
    if(bt!=NULL)
   {
     InOrderTraverse(bt->Lchild);
     printf("%d -->",bt->data);
     InOrderTraverse(bt->Rchild);
   }
}
void PostOrderTraverse(BTree *bt) //后序遍历
{
    if(bt!=NULL)
   {
     PostOrderTraverse(bt->Lchild);
     PostOrderTraverse(bt->Rchild);
     printf("%d -->",bt->data);
   }
}      

main()
{
    BTree  *bt;
    int a;
    printf("\t\t****************  二叉树操作  ****************\n\n");
    bt=Ini_BTNode();creat_BiTree(bt);
    printf("以%d为根的树创建成功!\n",bt->data);
    system("pause");
    system("cls");
    while(1)
    {

        system("cls");
        printf("\t\t1. 先序遍历\n");
        printf("\t\t2. 中序遍历\n");
        printf("\t\t3. 后序遍历\n");
        printf("\t\t4. 退出程序\n");
        printf("\t请选择:");
        scanf("%d",&a);
        switch(a)
        {
         case 1:printf("先序遍历\n");
                PerOrderTraverse(bt);
                printf("\n");
                system("pause"); break;
         case 2:printf("中序遍历\n");
                 InOrderTraverse(bt);
                 printf("\n");
                system("pause"); break;

         case 3:printf("后序遍历\n");
                 PostOrderTraverse(bt);
                 printf("\n");
                system("pause"); break;
         case 4:exit(0);
         default:printf("输入错误");
        }

     }
  system("pause");
}

时间: 2024-10-14 00:52:10

c语言(二叉树的操作)的相关文章

C语言之文件操作08——总结

C程序的文件操作共涵盖7个例题,包含格式打印,文件读取,条件查找,矩阵的文件操作,数据格式输入及调用计算等内容. 文件操作使得程序有更强的拓展性,使其可以单独保存数据,这为程序的调试和优化打下了坚实的基础,为我们实现大规模计算提供了可能.至此,相信大家对文件操作也有了比较好的认识,无非是写入.读取.调用. 我们常常会听说C的强大,也是因为她有着文件操作的功能,而文件数据是可以方便重写和维护的. MATLAB数学软件是一款十分强大的工具型软件,它是通过C语言来表达算法的,作为面向过程的编程语言C,

015_C语言中文件操作

 文件:存储在外部介质上的数据集合 ASCII码文件和二进制文件 流式文件和非流式文件 在内存中只有1和0,电脑在显示文件时,按一定编码显示 流式文件:输入输出的数据流的开始和结束仅受程序控制而不受物理符号控制 缓冲文件和非缓冲文件 每一个使用的文件都会在内存中开辟一个缓冲区 文件打开fopen 文件关闭fclose 读到文件末尾时即读到EOF 文件操作所用到的函数fgetc/fputc  fgets/fputs   fscanf/fprintf等一些函数使用时可同过帮助文档得知 文件定位函

c语言中字符串操作的工具类

 1.编写头文件 #define _CRT_SECURE_NO_WARNINGS //#pragmawarning(disable:4996) #include <stdio.h> #include <stdlib.h> #include <string.h> struct CString { char *p;        //保存字符串首地址 int reallength; //实际长度 }; typedef struct CString mystring;//

学习C/C++语言:文件的操作

#include<stdio.h> #include<stdlib.h> void main(int argc,char *argv[]) { FILE *in,*out; if(argc!=3) { printf("you forgot to enter a file name\n"); exit(0); } if((in=fopen(argv[1],"r"))==NULL) { printf("cannot open infli

C语言:宽字符集操作函数(unicode编码)

C语言:宽字符集操作函数(unicode编码) 字符分类: 宽字符函数 普通C函数描述 iswalnum() isalnum() 测试字符是否为数字或字母 iswalpha() isalpha() 测试字符是否是字母 iswcntrl() iscntrl() 测试字符是否是控制符 iswdigit() isdigit() 测试字符是否为数字 iswgraph() isgraph() 测试字符是否是可见字符 iswlower() islower() 测试字符是否是小写字符 iswprint() i

二叉树插入操作

/* 功能:将一个节点插入到二叉树中节点的子节点中 输入: p,c ,RL p:节点将插入到p所指向的节点的子节点中 c:指向待插入的节点 RL:为0表示插入到左子树,为1表示插入到右子树 输出:bool */ template<typename T> bool BinaryTree<T>::InsertChild(BTNode<T> *p,BTNode<T> *c,int RL) { if(p) { if(RL==0) //插入到p的左节点 { c->

字符数组在C++、C#等语言中的操作

1,C++中操作数组 #include <iostream> using namespace std; int length(char []); void output_frequency(char []); int main() { char str[]="yan cong min"; cout<<"要处理的字符串为:"<<str<<endl; cout<<"字符串长度为:"<&

C语言:宽字符集操作函数

C语言:宽字符集操作函数 (unicode编码) 字符分类: 宽字符函数普通C函数描述 iswalnum() isalnum() 测试字符是否为数字或字母 iswalpha() isalpha() 测试字符是否是字母 iswcntrl() iscntrl() 测试字符是否是控制符 iswdigit() isdigit() 测试字符是否为数字 iswgraph() isgraph() 测试字符是否是可见字符 iswlower() islower() 测试字符是否是小写字符 iswprint() i

关于c语言链表的操作

这几天又讲到链表了,但是又忘记了,所以重新把关于链表的建链表,对链表进行排序,然后是删除,插入,以及遍历等功能..但是最近要考试了,所以没有写成菜单的形式..等考试完了,在进行补充吧.. 代码如下... #include<stdio.h> #include<stdlib.h> #include<string.h> struct node { int data; struct node *next; }; int main() { /*建立链表操作*/ int n,x,p

C语言常见字符串操作函数总结

1. bcmp 原型:extern int bcmp(const void *s1, const void *s2, int n); 用法:#include <string.h> 功能:比较字符串s1和s2的前n个字节是否相等 说明:相等返回0,否则返回非0值 2. bcopy 原型:extern void bcopy(const void *src, const void *dest, int n); 用法:#include <string.h> 功能:将字符串src的前n个字节