C语言数据结构二叉树数据插入


指定一个数据为二叉树的根,向二叉树中插入数据,(树的第一层)如果要插入的数据比树根的数据大,则放在该结点的右侧,如果要插入的数据比树根小,则放在该结点的左侧,(树的第二层)数据的存放规则与上面的一致。

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

//创建结构体

typedef struct tree

{

int a;//存放数据

struct tree *l;//二叉树节点的左指针

struct tree *r;//二叉树节点的右指针

}r;

//声明一个插入函数s是二叉树的头节点,t是要插入到树中的节点

void cmp(r *s,r* t);

//创建节点的函数

r *creat()

{

r * s = (r *)malloc(sizeof(r));

if(NULL != s)

memset(s,0,sizeof(r));

return s;

}

//采用递归遍历的形式访问树中的每个节点,然后free

void destroy(r *r)

{

if(NULL == r)

return ;

destroy(r->l);

destroy(r->r);

free(r);//递归函数调用进行释放内存

}

//显示树中每个节点的数据

void show(r *r)

{

if(NULL == r)

return ;

look(r->l);

look(r->r);

printf("%d\t",r->a);//后续遍历

}

//向树中插入元素,s是树的根节点,t是要插入树中的节点

void insert(r *s,r* t)

{

if(t->a < (s->a) && s->l == NULL)//如果新节点中的树大于根节点中的树,并且根节点的左指针是NULL

{

s->l = t;//直接将该指针连接到根的左指针上

return ;//节点被连接到树上后就退出

}else if( t->a < (s->a) && NULL != s->l)//如果新节点中的树大于根节点中的树,并且根节点的左指针不是NULL

{

insert(s->l,t);//继续调用函数

}

if( t->a >= (s->a) && s->r == NULL)//如果新节点中的树小于根节点中的树,并且根节点的右指针是NULL

{

s->r = t;//直接将该指针连接到根的右指针上

return ;//节点被连接到树上后就退出

}else if(t->a >= (s->a ) && NULL != s->r)//如果新节点中的树小于根节点中的树,并且根节点的右指针不是NULL

{

insert(s->r,t);//继续调用函数直到将结点挂到该树上

}

}

void main()

{

r * root = creat();//创建根节点

root->a = 8;//给根节点一个初始值8

int s = 0;

while(1)

{

scanf("%d",&s);//键盘录入数据,然后将这些数据插入到树中

if(s == -1)//当输入-1时,结束输入

break;

r * pnew =creat();//对输入的每个数创建节点

pnew->a = s;//将输入的数赋值给创建的节点

insert(root,pnew);//将该节点插入进树中

}

show(root);//后续遍历书中所有的元素

destroy(root);//释放该树中所有的节点

}

时间: 2024-08-13 03:18:16

C语言数据结构二叉树数据插入的相关文章

javascript数据结构与算法--二叉树(插入节点、生成二叉树)

javascript数据结构与算法-- 插入节点.生成二叉树 二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 /* *二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 * * * */ /*用来生成一个节点*/ function Node(data, left, right) { this.data = data;//节点存储的数据 this.left = left; this.right = right; this.show = show; } function sh

[数据结构与算法分析(Mark Allen Weiss)]二叉树的插入与删除 @ Python

二叉树的插入与删除,来自Mark Allen Weiss的<数据结构与算法分析>. # Definition for a binary tree node class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None class BinarySearchTree: # @param root, a tree node # @return a list of integers def

数据结构 二叉树的建立、遍历、销毁的递归算法(C语言)

这些是较为简单的二叉树的建立.遍历.销毁的递归算法.假设二叉树都用二叉链作为存储结构,并约定根节点的指针用T表示. 为了简化问题,我们用char类型的字符代替树中的数据,并且用前序遍历的算法,建立二叉树过程如下: 输入一个根节点. 若输入的是“ ”(即空格字符),则表明改结点为空,T设置为NULL: 若输入的不是“ ”(空格字符),则将字符存入到T->data中,并依次递归建立它的左子树T->lchild,和右子树T->rchild; 测试的源代码如下: 1 #include<st

C语言实现二叉树-利用二叉树统计单词数目

昨天刚参加了腾讯2015年在线模拟考: 四道大题的第一题就是单词统计程序的设计思想: 为了记住这一天,我打算今天通过代码实现一下: 我将用到的核心数据结构是二叉树: (要是想了解简单二叉树的实现,可以参考我的另一篇文章:http://www.cnblogs.com/landpack/p/4783120.html) Problem 我需要统计的单词是在程序直接硬编码的: 这样做得原因是省略了文件输入输出所带来的困惑: 我的每篇文章,一般只说一个主题: 这样也方便我日后复习: Solution 首先

Redis各种数据结构性能数据对比和性能优化实践

很对不起大家,又是一篇乱序的文章,但是满满的干货,来源于实践,相信大家会有所收获.里面穿插一些感悟和生活故事,可以忽略不看.不过听大家普遍的反馈说这是其中最喜欢看的部分,好吧,就当学习之后轻松一下. Redis各种数据结构性能数据对比 测试工具:perf4j 性能指标:平均值,最小值,最大值,方差 对比将814条数据按单条插入到哈希MAP和哈希SET: 对比从814条数据的哈希MAP和哈希SET中判断一个元素是否存在(map的hasKey和set的isMember): 大量数据插入哈希MAP,运

读谭浩强C语言数据结构有感(1)

1.什么是数据结构? 数据结构,就是我们计算机内部的运算,编程语言的基础工作模式吧,个人总结的 = = !! 数据:说简单一点,就是计算机二进制机器码,然后通过一些复杂的操作,变为复杂的语言. 数据元素:数据有集合和元素的区别,集合里的个体就是数据元素,相对应的就是数据结构. 线性表: 说简单一点,就是线性存储结构,每个表中有大量的元素,这些元素在物理位置中都是连接起来的. 这些元素有直接前驱和直接后继.线性表的位置是相邻的. 比如,位置1,位置2,位置3......位置N. 还有一点,线性表的

C语言实现二叉树-02版

---恢复内容开始--- 昨天,提交完我们的二叉树项目后,今天早上项目经理早早给我打电话: 他说,小伙子干的不错.但是为什么你上面的insert是recusive的呢? 你难道不知道万一数据量大啦!那得消耗很多内存哈!: 我大吃一惊,那么项目经理果然不是吃素的,他是在提醒我别投机取巧啦: 我们都知道递归实现树是比较简单的一种方式: 的确它的性能比较差,试想每次递归都要把当前函数压栈,然后出栈.. 好啦,那咱们今天就用非递归实现它:反正今天我就不干别的啦: Problem 下面的代码你应该比较熟习

C语言实现二叉树

二叉树的重要性就不用多说啦: 我以前也学习过,但是一直没有总结: 网上找到的例子,要么是理论一大堆,然后是伪代码实现: 要么是复杂的代码,没有什么解释: 最终,还是靠FQ找到一些好的文章,参考地址我会在See Also部分给大家贴出来 Problem 假设我们要生成的二叉树如下图: Solution 显然,我们需要在节点保存的数据只有一个整数: struct binary_tree { int data ; // Data area //TODO }; 所以在结构体里面,我们的代码应该类似上面的

一些可运行的C语言数据结构代码

网上有很多C语言数据结构代码:有的不能运行:下面是一些能运行的,和运行截图:备用一下: 1 队列 #include<stdio.h> #include<stdlib.h> #define QUEUE_SIZE 50 typedef struct SeqQueue { int data[QUEUE_SIZE]; int front; int rear; }Queue; Queue *InitQueue() { Queue *q = (Queue *)malloc(sizeof(Que