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 ...
随机推荐
- rest版的webservice
为了学习app做打算 今天就自学了下webservice,rest应该是其中一种 还有种就是soap,目前就先举个rest的demo吧 准备ws的jar和spring的jar,如何要连接数据的话就自行 ...
- iOS 圆角图片
// 开启图形上下文UIGraphicsBeginImageContextWithOptions(image.size, NO, 0);// 剪裁 UIBezierPath *path=[UIBezi ...
- MFC编程入门之十二(对话框:非模态对话框的创建及显示)
上一节讲了模态对话框及其弹出过程,本节接着讲另一种对话框--非模态对话框的创建及显示. 非模态对话框显示后,程序其他窗口仍然能正常运行,可以响应用户输入,还可以相互切换.上一讲中创建的Tip模态对话框 ...
- php注意事项
1. 不要使用mysql_函数 这一天终于来了,从此你不仅仅"不应该"使用mysql_函数.PHP 7 已经把它们从核心中全部移除了,也就是说你需要迁移到好得多的mysqli_函数 ...
- sentinel搭建redis集群经验总结
一.protected-mode默认情况下,redis node和sentinel的protected-mode都是yes,在搭建集群时,若想从远程连接redis集群,需要将redis node和se ...
- Windows下pip安装包报错:Microsoft Visual C++ 9.0 is required Unable to find vcvarsall.bat
刚在机器上windows环境下装上pip方便以后安装包的时候使用,谁知道第一次使用pip安装asyncio的时候就报错. 在Windows7x64下使用pip安装包的时候提示报错:Microsoft ...
- mysql索引的使用[上]
数据库的explain关键字和联合索引优化: 本篇文章简单的说一下mysql查询的优化以及explain语句的使用.(新手向) 因为这篇文章是面向查询的,直观一点,首先我们创建一个表:student ...
- guacamole 0.8.3 项目部署 桌面虚拟化
Guacamole是一个基于HTML5的虚拟桌面应用程序,其中包含多个组件,由各组件共同构成Guacamole---一个完整的虚拟桌面解决方案,不需要任何插件,只要浏览器支持HTML5就可以实现,而且 ...
- iOS开发UI篇—UITableviewcell的性能优化和缓存机制
iOS开发UI篇—UITableviewcell的性能问题 一.UITableviewcell的一些介绍 UITableView的每一行都是一个UITableViewCell,通过dataSource ...
- input输入框输入文字出现清空文字按钮
$("#J_UserName").keyup(function(){ if($("#J_UserName").val() == "" || ...