c语言二叉树基本操作
编译器为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语言二叉树基本操作的更多相关文章
- c++学习笔记—二叉树基本操作的实现
用c++语言实现的二叉树基本操作,包括二叉树的创建.二叉树的遍历(包括前序.中序.后序递归和非递归算法).求二叉树高度,计数叶子节点数.计数度为1的节点数等基本操作. IDE:vs2013 具体实现代 ...
- C语言指针基本操作
C语言指针基本操作 指针 指针介绍 如果说C语言最有魅力的地方在哪,那么毋庸置疑,非指针莫属了. 众所周知,C语言中每个变量都有一个内存地址,可以通过&进行访问.指针是一个变量,它的值是一个 ...
- C语言SQLite3基本操作Demo
/************************************************************************** * C语言SQLite3基本操作Demo * 声 ...
- Hello world!(内含自己编写的C语言二叉树同学录)
修改:刷了一段时间的题,水平渐涨,发现同学录真的要做成市面可行的应用的话,应该按学号建立二叉平衡树,红黑树是一个可行的选择. 在同学的推荐下,来到博客园来找志同道合的人交流代码.3个月后参加蓝桥杯 ...
- 二叉树基本操作C++
#include <cstdio> #include <climits> #include <cassert> #include <iostream> ...
- C语言二叉树的建立与遍历
二叉树的建立和遍历都要用到递归,先暂时保存一下代码,其中主要是理解递归的思想,其它的就都好理解了.这里是三种遍历方式,其实理解一种,其它的几个就都理解了,就是打印出来的顺序不一样而已.建立和遍历的方式 ...
- [数据结构]C语言二叉树的实现
树和图是数据结构中比较麻烦的东西,里面涉及的概念比较多,也最有用, 就比如一般树广泛应用于人工智能的博弈上,而基于图的广度优先和深度优先搜索也广泛应用于人工智能寻路上面 首先我们要把树进行分类: &g ...
- Go语言二叉树定义及遍历算法实现
// binary_tree 二叉树 package Algorithm import ( "reflect" ) // 二叉树定义 type BinaryTree struct ...
- C语言二叉树的创建、(先中后序)遍历以及存在的问题
#include<stdlib.h> #include<stdio.h> #define True 1 #define False 0 typedef char TElemTy ...
随机推荐
- Caffe + Ubuntu 14.04 64bit + CUDA6.5 + 无GPU 配置
官网: http://caffe.berkeleyvision.org/installation.html#compilation 参考网站: http://www.cnblogs.com/dupul ...
- 类似\u4e0b\u6ce8\u903e\u65f6解码
HttpUtility.UrlDecode("\u4e0b\u6ce8\u903e\u65f6"); HttpUtility.UrlDecode("\\u5c1a\\u6 ...
- 【树莓派】基于TinyProxy搭建HTTP代理服务器
一.前言 关于为什么要玩玩HTTP代理就不用我多说了. 二.搭建环境 * Linux laptop 2.6.32-45-generic #100-Ubuntu SMP Wed Nov 14 10:4 ...
- 解决服务器时间Local time和RTC time不一致的问题
今天遇到了一个问题,发现程序读取的时间比实际的时间快了几分钟. 执行 timedatectl status 发现 Local time比实际的快,但是RTC time是准确的. 各种google也没搞 ...
- Reapter合并行
html文件: <asp:Repeater ID="rptEmployee" runat="server"> <HeaderTemplate& ...
- TCP连接的状态与关闭方式及其对Server与Client的影响
TCP连接的状态与关闭方式及其对Server与Client的影响 1. TCP连接的状态 首先介绍一下TCP连接建立与关闭过程中的状态.TCP连接过程是状态的转换,促使状态发生转换的因素包括用户调用. ...
- c读写文件
#include<stdio.h> void main(void) { // locate ]; scanf("%s", filename); getchar(); / ...
- Android DisplayMetrics类获取屏幕大小
DisplayMetrics public class DisplayMetrics extends Object java.lang.Object ↳ android.util.Disp ...
- apache认证、授权、访问控制
认证对象:某一个网站目录. 启用认证 1.即用AllowOverride指令指定哪些指令在针对单个目录的配置文件中有效:AllowOverride AuthConfig 2.设置密码登录访问某个站点或 ...
- linux应用开发小结
这几天一直在看<在实践中学嵌入式linux应用程序开发>这本书,昨天下午的时候算是把这本书完全搞懂了.除了第一章的交叉编译环境的搭建和第七章linux设备驱动开发第八章的安卓应用开发和第九 ...