基本数结构——二叉搜索树
2014-04-19 18:29
429 查看
/*
一个二叉搜索树的创建 遍历 和添加!
思路:采用递归的思路创建,和普通到二叉树思路一致。
SQ 2014 -04 -19
*/
#include<stdio.h>
#include<stdlib.h>
struct Node
{
int data; // value of node
struct Node *left; // left child of node
struct Node *right; // right child of node
}Node;
typedef struct Node * link;
link creat( ){ //把第一个节点当作根节点
link p;
p = (link)malloc(sizeof(Node));
p->left =NULL;
p->right =NULL;
p->data =10;
return p;
}
void add(link root , int data){ //插入节点也可用递归
link p;
p =(link)malloc(sizeof(Node));
p -> data = data;
p->left = p->right= NULL;
while( root->left != NULL || root->right != NULL ) {
if( (root ->left != NULL ) && (p->data < root->data))
root = root->left;
else if((root->left == NULL )&& (p->data <root->data)) break;
//如果左边为空,并且数比当前节点还小,那么就直接插入;
else if( (root ->right != NULL) && (p->data > root->data)) root = root->right;
else if((root->right ==NULL) && (p->data >root->data)) break;
} //现在root 就算新插入节点的父节点
if(p->data < root->data){
p->left = p->right =NULL;
root -> left = p;
}
if(p->data > root->data){
p->right = p->left = NULL;
root-> right = p;
}
}
show (link root){ //先序遍历 递归的思想
link p =root;
if (p->right == NULL && p->left == NULL){
printf("%d\n" , p->data);
return ;
}
else {
show(p->left);
printf("%d\n" ,p->data);
if(p->right != NULL)
show(p->right);
}
}
int main(){
link root;
root =creat();
add(root,6);
add(root,8);
add(root,4);
add(root,14);
add(root,12);
add(root,16);
show(root);
return 0;
}
一个二叉搜索树的创建 遍历 和添加!
思路:采用递归的思路创建,和普通到二叉树思路一致。
SQ 2014 -04 -19
*/
#include<stdio.h>
#include<stdlib.h>
struct Node
{
int data; // value of node
struct Node *left; // left child of node
struct Node *right; // right child of node
}Node;
typedef struct Node * link;
link creat( ){ //把第一个节点当作根节点
link p;
p = (link)malloc(sizeof(Node));
p->left =NULL;
p->right =NULL;
p->data =10;
return p;
}
void add(link root , int data){ //插入节点也可用递归
link p;
p =(link)malloc(sizeof(Node));
p -> data = data;
p->left = p->right= NULL;
while( root->left != NULL || root->right != NULL ) {
if( (root ->left != NULL ) && (p->data < root->data))
root = root->left;
else if((root->left == NULL )&& (p->data <root->data)) break;
//如果左边为空,并且数比当前节点还小,那么就直接插入;
else if( (root ->right != NULL) && (p->data > root->data)) root = root->right;
else if((root->right ==NULL) && (p->data >root->data)) break;
} //现在root 就算新插入节点的父节点
if(p->data < root->data){
p->left = p->right =NULL;
root -> left = p;
}
if(p->data > root->data){
p->right = p->left = NULL;
root-> right = p;
}
}
show (link root){ //先序遍历 递归的思想
link p =root;
if (p->right == NULL && p->left == NULL){
printf("%d\n" , p->data);
return ;
}
else {
show(p->left);
printf("%d\n" ,p->data);
if(p->right != NULL)
show(p->right);
}
}
int main(){
link root;
root =creat();
add(root,6);
add(root,8);
add(root,4);
add(root,14);
add(root,12);
add(root,16);
show(root);
return 0;
}
相关文章推荐
- Linux入门 Part2: 目录操作(2) - pwd&which 我...我在哪?
- Round #6 C.Alice, Bob and Chocolate
- 求罩
- 优化MYSQL数据库的方法
- Android OpenGL ES 光照模型
- c3 Threads - Thread Pools and Executors
- C#局域网桌面共享软件制作(一)
- Ubuntu 13.04安装VMware Tools,解决无法找到kernel header path的问题
- 根据前序,中序构建出BinaryTree
- 一个表中的Id有多个记录,把所有这个id的记录查出来,并显示共有多少条记录数,用SQL语句及视图、存储过程分别实现。
- Windows下用gSOAP开发webservice程序
- 第五章703N 刷openwrt 挂载u盘
- ACM-计算几何之围困——hrbustoj1142
- XMemcached&Spring集成
- 设计模式学习--------6.单例模式学习
- CodeBlocks输出中文乱码的解决方法
- 设计模式学习--------6.单例模式学习
- 所谓虚构造函数
- Javascript十问
- 2014编程之美挑战赛初赛 题目1 焦距