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

来源:互联网 发布:win7无法打开网络共享 编辑:程序博客网 时间:2024/05/16 10:44
/*
  一个二叉搜索树的创建 遍历 和添加!
思路:采用递归的思路创建,和普通到二叉树思路一致。
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;
}


0 0
原创粉丝点击