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 ...
随机推荐
- HQL 参数绑定、唯一结果、分页、投影总结(上)
我们先总结一下HQL语句常用语法: from子句:; select子句:用于选取对象和属性; where子句:用于表达查询语句的限制条件; 使用表达式:一般用在where子句中; order by子句 ...
- Python学习(14)模块二
一:_name_ Python中if _name_ == '_main_'的解析 当你打开一个.py文件时,经常会在代码的最下面看到if __name__ == '__main__':,现在就来介 绍 ...
- javascript事件之:谈谈自定义事件
对于JavaScript自定义事件,印象最深刻的是用jQuery在做图片懒加载的时候.给需要懒加载的图片定义一个appear事件.当页面图片开始出现时候,触发这个自定义的appear事件(注意,这里只 ...
- maven-surefire-plugin的乱码问题
今天项目中出现奇怪问题,在eclipse中直接运行TestNG时,全部都OK,但是执行mvn test时却失败.观察其输出日志,发现有乱码,怀疑是乱码导致. 最终在官网发现蛛丝马迹. maven-su ...
- ubuntu MySQL采用apt-get install安装目录情况
安装服务器:root@ubuntu:/# apt-get install mysql-server-5.5 安装客户端:root@ubuntu:/# apt-get install mysql-cli ...
- linux -- 基于mysql tomcat 部署web项目
一.导入数据库 二.配置web项目访问端口 vim /var/lib/tomcat8/conf/server.xml <Connector port=" protocol=" ...
- SPSS数据分析—分段回归
在SPSS非线性回归过程中,我们讲到了损失函数按钮可以自定义损失函数,但是还有一个约束按钮没有讲到,该按钮的功能是对自 定义的损失函数的参数设定条件,这些条件通常是由逻辑表达式组成,这就使得损失函数具 ...
- 用c语言编写二分查找法
二分法的适用范围为有序数列,这方面很有局限性. #include<stdio.h> //二分查找法 void binary_search(int a[],int start,int mid ...
- iOS开发UI篇—ios应用数据存储方式(偏好设置)
iOS开发UI篇—ios应用数据存储方式(偏好设置) 一.简单介绍 很多iOS应用都支持偏好设置,比如保存用户名.密码.字体大小等设置,iOS提供了一套标准的解决方案来为应用加入偏好设置功能 每个应用 ...
- oracle数据库的乱码问题解决方案
我的电脑-----高级系统设置----高级-----环境变量 LANG=zh_CN.GBK NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK