二叉查找树的遍历和插入

#include<stdio.h>
#include<stdlib.h>
struct tree{
	int ele;
	struct tree* left;
	struct tree* right;
};
typedef struct tree* pointer;
typedef struct tree trees;
void insert(pointer *T1,int interag){
	pointer prev;
	pointer T=*T1;

	if(T==NULL)
	          {
	          	(*T1)=(pointer)malloc(sizeof(trees));
	          	(*T1)->ele=interag;
	          	(*T1)->left=(*T1)->right=NULL;
			  }
	else {
	     while(T!=NULL)
		    {
			if(interag<T->ele)
			    {
				prev=T;
	         	T=T->left;}
			else  {
			      prev=T;
			      T=T->right;}}
		 if(interag<prev->ele)
		    {
			prev->left=(pointer)malloc(sizeof(trees));
		    prev->left->ele=interag;
		    prev->left->left=prev->left->right=NULL;
			}
		 else  {
			prev->right=(pointer)malloc(sizeof(trees));
		    prev->right->ele=interag;
		    prev->right->left=prev->right->right=NULL;
			}}

}
void printftree(pointer T)
     {
     if(T!=NULL){
     	printftree(T->left);
     	printf("%d",T->ele);
     	printftree(T->right);
	 }

	 }
int main(void)
            {
            pointer T=NULL;
			insert(&T,3);
			insert(&T,2);
			insert(&T,4);
			insert(&T,1);
			insert(&T,5);
			printftree(T);

			 }
时间: 2025-01-09 05:46:21

二叉查找树的遍历和插入的相关文章

ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法

ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法 语法 第一种: 通过使用Oracle语句块  --指定文档所有部门都能查看 declare cursor TABLE_DEPT is SELECT ID,UNAME from g_users where utype=2 and STATUS>-1; begin for c in TABLE_DEPT loop INSERT INTO G_KNOWDOCRIGHT(RID,DIRID,DOCID,USERID) VALUES(SYS

中序遍历-----二叉查找树的遍历(迭代版,不使用栈或者队列)

二叉查找树(Binary Search Tree)的遍历的方法有很多,通常使用的是递归的遍历,其便于理解,但是使用递归的话会造成程序运行的空间浪费,效率并不高.为此可以使用一个栈来模拟递归的过程,实现迭代版的二叉查找树的遍历.但是会使用到额外的存储空间,虽说在运行效率上比递归版的有所提高,但是额外的存储空间还是一定的浪费.但是如何减少额外的存储空间呢?我们知道二叉查找树是可以转换为一个双向环形链表(二叉查找树与双向环形链表的转化),而链表的遍历是不需要额外的空间的,因此我们可以考虑通过充分利用树

二叉查找树(1) - 查找以及插入

在WikiPedia中,对二叉查找树的定义如下: 二叉查找树,是一种基于节点的二叉树,有下面的性质: 节点的左子树中任意节点值小于根节点 节点的右子树中任意节点值大于根节点 左右子树都必须是二叉查找树,不允许存在重复节点. 二叉查找树的上述性质,保证了各节点值的顺序,这样进行查找,求最大值最小值时,会效率更高.如果没有这种顺序,则可能需要将树中的每个节点与指定的查找值进行比较. 查找一个节点值 二叉树中查找一个节点值时,首先与根节点比较,相等则返回根节点.如果根节点小于指定值,则递归的查找右子树

vector的应用(元素遍历、插入、删除、交换等)

这里主要是对vector容器的一些常见应用的总结.至于vector的构造函数及初始化可以参考http://blog.csdn.net/lsh_2013/article/details/21191289,这里不再赘述. 元素的遍历 用迭代器访问vector元素 #include <vector> #include <iostream> using namespace std; int main(void) { vector<int> v; v.push_back(42);

list双向链表容器应用基础(创建、遍历、插入、删除、归并、排序及连续重复元素剔除等)

不同于采用线性表顺序存储结构的vector和deque容器,list双向链表中任一位置的元素差值.插入和删除,都具有高效的常数阶算法时间复杂度O(1). 头文件 #include<list> 创建list对象 1)list();//创建一个没有任何元素的list对象. list<int>l 2)list(size_type n);//创建一个具有n个元素的list对象,每个元素采用它的类型下的默认值. list<int>l(10);//list对象l有10个元素,每个元

二叉查找树的查找、插入和删除 - Java实现

http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html 作者: yangecnu(yangecnu's Blog on 博客园) 出处:http://www.cnblogs.com/yangecnu/ 英文原文的出处:http://algs4.cs.princeton.edu/32bst/ 前文介绍了符号表的两种实现,无序链表和有序数组,无序链表在插入的时候具有较高的灵活性,而有序数组在查找时具有较高的效率,本文介绍

Java 链表(LinkNode)的简单操作:初始化,遍历,插入,删除等

由于java中没有结构体,所以用一个类来定义链表,代码如下 主要包括一个data,还有一个指向后面一个节点的next 重写了toString函数,返回你想要的数据 定义链表的类: package LinkNode; public class LinkNode { public String data; public LinkNode next; public String getData(){ return data; } public void setData(String data){ th

[转]C++ STL list的初始化、添加、遍历、插入、删除、查找、排序、释放

list是C++标准模版库(STL,Standard Template Library)中的部分内容.实际上,list容器就是一个双向链表,可以高效地进行插入删除元素. 使用list容器之前必须加上STL的list容器的头文件:#include<list>; list属于std命名域的内容,因此需要通过命名限定:using std::list;也可以直接使用全局的命名空间方式:using namespace std; (1)初始化 typedef struct info_s { int nNu

文件夹文件遍历并插入数据库的操作,IO Directory File的递归操作

在我们管理内容管理系统时,数据量大时,对机器的依赖性就比较强了,比如,我要将一个文件夹中的很多图片上传到网站,一个个上传会很花时间,就想到了通过遍历文件夹得到文件名,并将路径与文件保存到数据库中对应的字段. 下面写两个实例, using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.IO; using System.Linq; using