您的位置:首页 > 其它

基本数结构——二叉搜索树

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: