数据结构,二叉树结构,求详细过程

使用C语言构建基本的二叉树数据结构
二叉树结构常用的一些初始化代码
typedef struct Node{
初始化一棵二叉树排序树。
void InitBinaryTree(Node**root,int elem)
*root=(Node*)malloc(sizeof(Node));
if(!(*root))
printf("Memory allocation for root failed.\n");
(*root)-&data=
(*root)-&leftchild=NULL;
(*root)-&rightchild=NULL;
向二叉树排序树中插入节点。
void InsertNode(Node *root,int elem)
Node *newnode=NULL;
Node *p=root,*last_p=NULL;
newnode=(Node*)malloc(sizeof(Node));
if(!newnode)
printf("Memory allocation for newnode failed.\n");
newnode-&data=
newnode-&leftchild=NULL;
newnode-&rightchild=NULL;
while(NULL!=p)
if(newnode-&datadata)
else if(newnode-&data&p-&data)
printf("Node to be inserted has existed.\n");
free(newnode);
if(newnode-&datadata)
p-&leftchild=
p-&rightchild=
创建一棵二叉树排序树。
void CreatBinarySearchTree(Node **root,int data[],int num)
if(NULL==*root)
InitBinaryTree(root,data[i]);
InsertNode(*root,data[i]);
根据前序序列、中序序列构建二叉树
bt rebuildTree(char *pre, char *in, int len);
* pre:前序遍历结果的字符串数组
* in:中序遍历结果的字符串数组
len : 树的长度
前序遍历结果: a b c d e f g h
中序遍历结果: c b e d f a g h
&&& 递归思想,递归的终止条件是树的长度len == 0
&&& 在中序遍历的数组中找到前序数组的第一个字符,记录在中序数组中的位置index.如果找不到,说明前序遍历数组和中序遍历数组有问题,提示错误信息,退出程序即可;找到index后,新建一个二叉树节点t,t-&item = *pre,然后递归的求t的左孩子和有孩子
&&& 递归的左孩子:void rebuildTree(pre + 1, in, index)
&&& 递归的右孩子:void rebuildTree(pre + (index + 1), in + (index + 1), len - (index + 1))
实现代码(c语言版)
* Description:根据前序和中序构建二叉树
bt rebuildTree(char *pre, char *in, int len)
if(len &= 0)
//递归终止
//递归主体
int index = 0;
while(index & len && *(pre) != *(in + index))
if(index &= len)
printf("前序遍历或者中序遍历数组有问题!\n");
t = (struct bintree *)malloc(sizeof(struct bintree));
t-&item = *
t-&lchild = rebuildTree(pre + 1, in, index);
t-&rchild = rebuildTree(pre + (index + 1), in + (index + 1), len - (index + 1));
根据中序序列、后序序列构建二叉树
* 中序、后序序列构建二叉树
btree* rebuildTree(char *order, char *post, int len);
中序序列:C、B、E、D、F、A、H、G、J、I
后序序列:C、E、F、D、B、H、J、I、G、A
递归思路:
&&& 根据后序遍历的特点,知道后序遍历最后一个节点为根节点,即为A
&&& 观察中序遍历,A左侧CBEDF为A左子树节点,A后侧HGJI为A右子树节点
&&& 然后递归的构建A的左子树和后子树
实现代码(c代码)
* 根据中序和后序序列构建二叉树
* (ps:昨晚参加阿里笔试,等到最后说可以免笔试直接面试,今天估计还是要根据学校筛选,哈哈,为了这点
* 也得参加阿里笔试,不能让自己的学校受到鄙视)
#include &stdio.h&
#include &stdlib.h&
#include &string.h&
typedef struct btree {
struct btree *
struct btree *
* 中序、后序序列构建二叉树
btree* rebuildTree(char *order, char *post, int len)
if (len &= 0) {
return NULL;
int index = 0;
while (index & len && *(post + len - 1) != *(order + index)) {
t = (btree *)malloc(sizeof(btree));
t-&data = *(order + index);
t-&lchild = rebuildTree(order, post, index);
t-&rchild = rebuildTree(order + index + 1, post + index, len - (index + 1));
* 前序遍历二叉树
void preTraverse(btree *t)
printf("%c ", t-&data);
preTraverse(t-&lchild);
preTraverse(t-&rchild);
int main(void)
char *post, *
while (scanf("%d", &n) != EOF) {
post = (char *)malloc(n);
order = (char *)malloc(n);
getchar();
for (i = 0; i & i ++)
scanf("%c", order + i);
getchar();
for (i = 0; i & i ++)
scanf("%c", post + i);
t = rebuildTree(order, post, n);
preTraverse(t);
printf("\n");
free(post);
free(order);
顶一下(0) 踩一下(0)
热门标签:您的举报已经提交成功,我们将尽快处理,谢谢!
//BinaryTree.h/*二叉树的二叉链表结点定义*/typedefstructBiTNode{datatyped...
用递归法比较麻烦,
如果你只是不想用itoa的话,你可以
用sprintf()啊
int a=4354;
char sztmp[20];
/* ds7_1.c: 二叉树的创建、显示、查找、遍历、插入 */
#include "stdio.h"
#include "string.h"
int i,a=1;
for(i=30;i&1;i--)
给你百度了一下,看看可以有帮助吗?
大家还关注数据结构 6.3 求二叉树的深度
数据结构 6.3 求二叉树的深度
  void BiTreeDepth(BiTree T, int level, int &depth)  {   //T指向二叉树的根,level为T所指结点所在层次,   //其初值为1,depth为当前求得的最大层次,其初值为0   if (T){ &  if (level&depth) depth= &  BiTreeDepth(T-&Lchild, level+1, depth); &  BiTreeDepth(T-&Rchild, level+1, depth);   }//if  }//BiTreeDepth
  假设在主函数中定义一个BiTree型的变量r,则主函数中求r所指二叉树的深度的语句为:
  H=0;  BiTreeDepth(r,1,H);
  若r所指为空树,则算法6.4什么也不做就结束,则d仍然等于0;对于非空树,算法执行的过程如动画所示:
H3C认证Java认证Oracle认证
基础英语软考英语项目管理英语职场英语
.NETPowerBuilderWeb开发游戏开发Perl
二级模拟试题一级模拟试题一级考试经验四级考试资料
港口与航道工程建设工程法规及相关知识建设工程经济考试大纲矿业工程市政公用工程通信与广电工程
操作系统汇编语言计算机系统结构人工智能数据库系统微机与接口
软件测试软件外包系统分析与建模敏捷开发
法律法规历年试题软考英语网络管理员系统架构设计师信息系统监理师
高级通信工程师考试大纲设备环境综合能力
路由技术网络存储无线网络网络设备
CPMP考试prince2认证项目范围管理项目配置管理项目管理案例项目经理项目干系人管理
Powerpoint教程WPS教程
电子政务客户关系管理首席信息官办公自动化大数据
职称考试题目
就业指导签约违约职业测评
招生信息考研政治
网络安全安全设置工具使用手机安全
3DMax教程Flash教程CorelDraw教程Director教程
Dreamwaver教程HTML教程网站策划网站运营Frontpage教程
生物识别传感器物联网传输层物联网前沿技术物联网案例分析
互联网电信IT业界IT生活
Java核心技术J2ME教程
Linux系统管理Linux编程Linux安全AIX教程
Windows系统管理Windows教程Windows网络管理Windows故障
组织运营财务资本
视频播放文件压缩杀毒软件输入法微博
数据库开发Sybase数据库Informix数据库
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&求二叉树的深度(C语言) | Hello world!小组 | 果壳网 科技有意思
126866人加入此小组
求大神帮个忙
在此先谢谢了!!!
+ 加入我的果篮
好想只有遍历吧
递归取最大。
DFS或者BFS应该可以吧……DFS可能慢一点,BFS可能空间开销大一点……
(C)2016果壳网&&&&京ICP证100430号&&&&京网文[-239号&&&&新出发京零字东150005号}

我要回帖

更多关于 二叉树的存储结构 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信