编译器为vs2013

#include "stdafx.h"

#include<malloc.h>

#include<stdlib.h>

#define OVERFLOW -1

typedef char BElemType;

typedef int Status;

typedef struct BiTree{

BElemType data;

struct BiTree *lchild,*rchild;

}BitNode,*BinTree;

//函数声明

void CreatTree(BinTree &T);                      //构建二叉树并赋值

void PreOrderTaverse(BinTree T);                 //先序遍历二叉树并输出

void InOrderTaverse(BinTree T);                  //中序遍历二叉树并输出

void PostOrderTaverse(BinTree T);                //后序遍历二叉树并输出

Status DepthTree(BinTree T);                     //返回树的深度

Status LeafNode(BinTree T, int &leaves);         //返回叶子结点个数

Status TreeNode(BinTree T, int &node);           //返回节点总数

int main()

{

int h, leaves=0, node=0;

BinTree T;

CreatTree(T);

PreOrderTaverse(T);

printf("\n");

InOrderTaverse(T);

printf("\n");

PostOrderTaverse(T);

printf("\n");

h=DepthTree(T);

leaves=LeafNode(T,leaves);

node = TreeNode(T,node);

printf("树的高度为%d\n叶子节点数为%d\n节点总数为%d\n", h, leaves, node);

}

//构建二叉树并赋值

void CreatTree(BinTree &T)

{

BElemType ch;

scanf_s("%c", &ch);

if (ch== ' ')

T = NULL;

else

{

if (!(T = (BinTree)malloc(sizeof(BitNode))))

exit(OVERFLOW);

T->data = ch;

CreatTree(T->lchild);

CreatTree(T->rchild);

}

}

//先序遍历二叉树并输出

void PreOrderTaverse(BinTree T)

{

if (T)

{

printf("%c ", T->data);

PreOrderTaverse(T->lchild);

PreOrderTaverse(T->rchild);

}

}

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

void InOrderTaverse(BinTree T)

{

if (T)

{

InOrderTaverse(T->lchild);

printf("%c ", T->data);

InOrderTaverse(T->rchild);

}

}

//后序遍历二叉树并输出

void PostOrderTaverse(BinTree T)

{

if (T)

{

PostOrderTaverse(T->lchild);

PostOrderTaverse(T->rchild);

printf("%c ", T->data);

}

}

//返回树的深度

Status DepthTree(BinTree T)

{

int dl,dr,deep;

if (!T)

deep = 0;

else if ((T->lchild == NULL)&&(T->rchild == NULL))

deep = 1;

else

{

dl=DepthTree(T->lchild);

dr=DepthTree(T->rchild);

deep = 1 + (dl > dr ? dl : dr);

}

return deep;

}

//返回叶子结点个数

Status LeafNode(BinTree T,int &leaves)

{

if (T)

{

if ((T->lchild == NULL) && (T->rchild == NULL))

leaves++;

LeafNode(T->lchild, leaves);

LeafNode(T->rchild, leaves);

}

return leaves;

}

//返回节点总数

Status TreeNode(BinTree T,int &node)

{

if (T)

{

node++;

TreeNode(T->lchild, node);

TreeNode(T->rchild, node);

}

return node;

}

c语言二叉树基本操作的更多相关文章

  1. c++学习笔记—二叉树基本操作的实现

    用c++语言实现的二叉树基本操作,包括二叉树的创建.二叉树的遍历(包括前序.中序.后序递归和非递归算法).求二叉树高度,计数叶子节点数.计数度为1的节点数等基本操作. IDE:vs2013 具体实现代 ...

  2. C语言指针基本操作

    C语言指针基本操作 指针  指针介绍 如果说C语言最有魅力的地方在哪,那么毋庸置疑,非指针莫属了. 众所周知,C语言中每个变量都有一个内存地址,可以通过&进行访问.指针是一个变量,它的值是一个 ...

  3. C语言SQLite3基本操作Demo

    /************************************************************************** * C语言SQLite3基本操作Demo * 声 ...

  4. Hello world!(内含自己编写的C语言二叉树同学录)

      修改:刷了一段时间的题,水平渐涨,发现同学录真的要做成市面可行的应用的话,应该按学号建立二叉平衡树,红黑树是一个可行的选择. 在同学的推荐下,来到博客园来找志同道合的人交流代码.3个月后参加蓝桥杯 ...

  5. 二叉树基本操作C++

    #include <cstdio> #include <climits> #include <cassert> #include <iostream> ...

  6. C语言二叉树的建立与遍历

    二叉树的建立和遍历都要用到递归,先暂时保存一下代码,其中主要是理解递归的思想,其它的就都好理解了.这里是三种遍历方式,其实理解一种,其它的几个就都理解了,就是打印出来的顺序不一样而已.建立和遍历的方式 ...

  7. [数据结构]C语言二叉树的实现

    树和图是数据结构中比较麻烦的东西,里面涉及的概念比较多,也最有用, 就比如一般树广泛应用于人工智能的博弈上,而基于图的广度优先和深度优先搜索也广泛应用于人工智能寻路上面 首先我们要把树进行分类: &g ...

  8. Go语言二叉树定义及遍历算法实现

    // binary_tree 二叉树 package Algorithm import ( "reflect" ) // 二叉树定义 type BinaryTree struct ...

  9. C语言二叉树的创建、(先中后序)遍历以及存在的问题

    #include<stdlib.h> #include<stdio.h> #define True 1 #define False 0 typedef char TElemTy ...

随机推荐

  1. C library function - freopen()

    Description The C library function FILE *freopen(const char *filename, const char *mode, FILE *strea ...

  2. CSS布局基础之一设备像素,设备独立像素,设备像素比,css像素之间的关系

    设备像素dp(device pixels) ppi(pixels per inch)表示每英寸所拥有的像素(pixel)数目,数值越高,代表屏幕能以更高的密度显示图像. 计算公式:ppi=像素数量/物 ...

  3. px和em的区别(转)

    在国内网站中,包括三大门户,以及“引领”中国网站设计潮流的蓝色理想,ChinaUI等都是使用了px作为字体单位.只有百度好歹做了个可调的表率.而 在大洋彼岸,几乎所有的主流站点都使用em作为字体单位, ...

  4. FileStream和StreamWriter配合写数据流时,出现数据写不进去的问题

    今天做一个数据导进txt小程序时,发现一个问题,就是没有关闭sw的流,只关闭了fs的,结果写不进去数据,看代码是对的,就是不行,最后就随手填上了sw的关闭后,可以了,反复测试,竟然就是这的问题,有点搞 ...

  5. Pycharm使用问题# 内部Terminal

    1.Windows XP并不支持内部Terminal

  6. linux下tar.gz、tar、bz2、zip等解压缩、压缩命令小结

    Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的.生成tar包后,就可以用其它的程序来进 行压缩了,所以首先就来讲讲ta ...

  7. 在Ubuntu中创建与Windows的共享文件夹

    在Ubuntu中创建与Windows的共享文件夹 本周的学习需要用到一个压缩包,我从QQ群里下载到了Windows里.虽说我已经安装了虚拟机增强功能,能够与Windows系统共享剪切板,但它也只能共享 ...

  8. 网页项目——i家居网站

    本文介绍一个网页项目--i家居网站,小妹初来乍到,欢迎大家评论建议O(∩_∩)O~ 详细源代码.各种框架的实现以及素材均已上传百度云,需要的可以下载: 首页展示 用户注册页面 用户登录页面 商家注册页 ...

  9. c#调用c++动态链接库的问题

    1. Server Error in '/' Application. Object reference not set to an instance of an object. 这个问题是接口中的方 ...

  10. “LC.exe”已退出,代码为 -1

    造成这个问题的原因一般是引入了第三方插件,自己遇到的问题是引入了devexpress...... 1.找到Properties文件夹licenses.licx文件,然后右键选择删除就可以了,调试运行正 ...