c语言编程之二叉树

  利用链表建立二叉树,完成前序遍历、中序遍历、后序遍历。

  建立二叉树用的是前序遍历建立二叉树:

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<math.h>
  4 #include<malloc.h>
  5
  6
  7 typedef int element;
  8 typedef struct Tree{
  9         struct Tree *lchild,*rchild;
 10         char data;
 11 }*pTree,pNode;
 12
 13 //char str[]="ABD#E##FG###CI##H##";
 14 char str[]="ABDH#K###E##CFI###G#J##";
 15 element index=0;
 16 //Init a empty tree
 17 element Init_tree(pTree *T)
 18         {
 19            *T=NULL;
 20            printf("init a empty tree\n");
 21         }
 22
 23 //build a tree
 24 void Creat_tree(pNode **T)
 25         {
 26            char num;
 27            num=str[index++];
 28            pTree P=NULL;
 29            //P=*T;
 30            if(num==‘#‘)
 31                 *T=NULL;
 32            else
 33              {
 34               // if(!(*T))
 35                 // exit(OVERFLOW);
 36                (*T)=(pTree)malloc(sizeof(pNode));
 37                //memset(*T,0,sizeof(pNode));
 38                (*T)->data=num;
 39                Creat_tree(&(*T)->lchild);
 40                Creat_tree(&(*T)->rchild);
 41              }
 42         }
 43
 44 //pro order traversal
 45 element Pro_trav(pTree T)
 46         {
 47            if(T==NULL)
 48                 return ;
 49            printf("pro order traversal data:%c\n",T->data);
 50            Pro_trav(T->lchild);
 51            Pro_trav(T->rchild);
 52         }
 53
 54 //midle order traversal
 55 element Mid_trav(pTree T)
 56         {
 57            if(T==NULL)
 58                 return;
 59            Mid_trav(T->lchild);
 60            printf("mid order traversal data:%c\n",T->data);
 61            Mid_trav(T->rchild);
 62         }
 63
 64 //after traversal
 65 element Aft_trav(pTree T)
 66         {
 67            if(T==NULL)
 68                 return;
 69            Aft_trav(T->lchild);
 70            Aft_trav(T->rchild);
 71            printf("after order traversal data:%c\n",T->data);
 72         }
 73
 74 element main()
 75         {
 76            pTree T;
 77            T=(pTree)malloc(sizeof(struct Tree));
 78            //Init_tree(&T);
 79            printf("before is ok\n");
 80            Creat_tree(&T);
 81            Pro_trav(T);
 82            Mid_trav(T);
 83            Aft_trav(T);
 84            return 0;
 85         }
 86 

   输出结果:

 1 before is ok
 2 pro order traversal data:A
 3 pro order traversal data:B
 4 pro order traversal data:D
 5 pro order traversal data:H
 6 pro order traversal data:K
 7 pro order traversal data:E
 8 pro order traversal data:C
 9 pro order traversal data:F
10 pro order traversal data:I
11 pro order traversal data:G
12 pro order traversal data:J
13 mid order traversal data:H
14 mid order traversal data:K
15 mid order traversal data:D
16 mid order traversal data:B
17 mid order traversal data:E
18 mid order traversal data:A
19 mid order traversal data:I
20 mid order traversal data:F
21 mid order traversal data:C
22 mid order traversal data:G
23 mid order traversal data:J
24 after order traversal data:K
25 after order traversal data:H
26 after order traversal data:D
27 after order traversal data:E
28 after order traversal data:B
29 after order traversal data:I
30 after order traversal data:F
31 after order traversal data:J
32 after order traversal data:G
33 after order traversal data:C
34 after order traversal data:A
时间: 2024-10-07 06:07:18

c语言编程之二叉树的相关文章

轻松学习C语言编程的秘诀:总结+灵感

目前在准备一套C语言的学习教程,所以我这里就以C语言编程的学习来讲.注意,讲的是"轻松学习",那种不注重方法,拼命玩命的方式也有其效果,但不是我提倡的.我讲究的是在方式方法对头.适合你.减轻你学习负担和心里压力的前提下,才适当的抓紧时间. 因此,探索一种很好的学习方法就是我所研究的主要内容. 众所周知,学习C语言并非易事,要学好它更是难上加难.这和你期末考试背会几个题目的答案考上满分没多大关系,也就是说你考试满分也说明不了你学好.学精通了C语言.那么怎么才算学精通C语言?闭着眼睛对自己

YL-236 LCD12864汉字显示C语言编程

sfr P0=0x80; sfr P1=0x90; sfr P2=0xa0; sfr P3=0xb0; sbit cs1=P2^0; sbit cs2=P2^1; sbit e=P2^2; sbit rw=P2^3;//可以直接接地 sbit di=P2^4; sbit rst=P2^5;//默认为1,可以直接接电源 extern unsigned char code abc[] ; ys(int ms) { int k,d; for(k=0;k<ms;k++) for(d=0;d<123;d

华为C语言编程规范

DKBA华为技术有限公司内部技术规范DKBA 2826-2011.5C语言编程规范2011年5月9日发布 2011年5月9日实施华为技术有限公司Huawei Technologies Co., Ltd.版权所有 侵权必究All rights reserved密级:confidentiality levelDKBA 2826-2011.52011-06-02 华为机密,未经许可不得扩散 Huawei Confidential 第2页,共61页Page 2 , Total61修订声明Revision

LINUX下C语言编程基础

实验二 Linux下C语言编程基础 一.实验目的 1. 熟悉Linux系统下的开发环境 2. 熟悉vi的基本操作 3. 熟悉gcc编译器的基本原理 4. 熟练使用gcc编译器的常用选项 5 .熟练使用gdb调试技术 6. 熟悉makefile基本原理及语法规范 7. 掌握静态库和动态库的生成 二.实验步骤 1. 快捷键 Ubuntu中: 2. vim VIM是一个非常好的文本编辑器,很多专业程序员使用VIM编辑代码,即使以后你不编写程序,只要跟文本打交道,都应该学学VIM,可以浏览参考一下普通人

关于C语言编程软件的推荐!

现在有各种各样的C语言编程软件,现在推荐一下codeblocks,codeblocks不仅仅局限于c语言,它适用于多种语言. Code::Blocks 是一个开放源码的全功能的跨平台C/C++集成开发环境. Code::Blocks是开放源码软件.Code::Blocks由纯粹的C++语言开发完成,它使用了著名的图形界面库wxWidgets(2.6.2 unicode)版.对于追求完美的C++程序员,再也不必忍受Eclipse的缓慢,再也不必忍受VS.NET的庞大和高昂的价格. 在网络上直接下载

linux下的c语言编程删除文件夹

刚刚在学习开始做新项目的时候,学长布置了一项任务,就是在给定一个目录下,要将这个目录下一个星期之前的目录包括里面的文件全部删除,只保留这一个星期内的.百度了好久的资料,终于完成,记录一下防止忘记.(注:文件夹名称默认为日期格式,如20140716) #include<dirent.h> #include<sys/types.h> #include<string.h> #include<stdlib.h> #include<unistd.h> #i

编程算法 - 二叉树的深度 代码(C)

二叉树的深度 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 输入一棵二叉树的根节点, 求该树的深度. 依次选择最深的左右子树, 然后递归加1. 代码: /* * main.cpp * * Created on: 2014.6.12 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #include <stdio.h> #include <stdlib.h> #include <

学习go语言编程系列之helloworld

1. 下载https://golang.org/dl/ # Go语言官网地址,在国内下载太慢,甚至都无法访问.通过如下地址下载:https://golangtc.com/download. 2. 安装在windows下,直接一步步点击安装即可. 3. 配置在正式开始go语言编程之前,需要进行一些基础环境变量的配置.在这里主要需要配置2个环境变量:GOROOT和GOPATH.(1)GOROOT:GO的安装路径,需要添加到环境变量中. Linux环境: vim /etc/profile export

R语言编程艺术(1)快速入门

这本书与手上其他的R语言参考书不同,主要从编程角度阐释R语言,而不是从统计角度.因为之前并没有深刻考虑这些,因此写出的代码往往是一条条命令的集合,并不像是"程序",因此,希望通过学习这本书,能提高编程效率,以及让自己更像是一个"程序员". 本文对应<R语言编程艺术>第1章:快速入门. 生成向量的函数c(),这里c表示"连接"(concatenate) 打印列表方式: print(listname) str(listname) 第一种将