二叉排序树1

摘要:
二进制排序树是一个常规的二进制树。每个节点的左子树比他小,每个节点的右子树比他大。b) 回报;InOrderTree;输出函数InOrderTree;}搜索二叉树:intsearchTree{if(!B){p=f;return0;}elseif{p=B;return1;}eleif returnsearchTree;elsereturnsearchTree;}插入二叉树:boolinsertTree{BTree*p,*s;if(!

二叉排序树,是一种规整的二叉树。每个节点的左子树都小于他,每个节点的右子树都大于他。

二叉树的遍历:

void InOrderTree(BTree *b){
    if( !b )
        return;
    InOrderTree(b->lchild);
    printf("%d ",b->data);
    InOrderTree(b->rchild);
}

二叉树的查找:

int searchTree(BTree *b,int key,BTree *f,BTree *&p){
    if(!b){
        p = f;
        return 0;
    }
    else if( key == b->data){
        p = b;
        return 1;
    }
    else if(key > b->data)
        return searchTree(b->rchild,key,b,p);
    else
        return searchTree(b->lchild,key,b,p);
}

二叉树的插入:

bool insertTree(BTree *b,int key){
    BTree *p,*s;
    if(!searchTree(b,key,NULL,p)){
        s = (BTree *)malloc(sizeof(BTree));
        s->data = key;
        s->lchild = s->rchild = NULL;
        if(!b){
            b = s;
        }
        else if(key < p->data){
            p->lchild = s;
        }else{ 
            p->rchild = s;
        }
        return true;
    }else
        return false;
}

全部代码:

二叉排序树1第1张二叉排序树1第2张
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 typedef struct bTree{
 4     int data;
 5     struct bTree *lchild,*rchild;
 6 }BTree;
 7 
 8 void initialTree(BTree *b);
 9 bool insertTree(BTree *b,int key);
10 int searchTree(BTree *b,int key,BTree *f,BTree *&p);
11 void InOrderTree(BTree *b);
12 
13 int main(){
14     BTree *b = (BTree *)malloc(sizeof(BTree));
15     b->data = 5;
16     b->lchild = b->rchild = NULL;
17     initialTree(b);
18     InOrderTree(b);
19     getchar();
20     return 0;
21 }
22 
23 void InOrderTree(BTree *b){
24     if( !b )
25         return;
26     InOrderTree(b->lchild);
27     printf("%d ",b->data);
28     InOrderTree(b->rchild);
29 }
30 
31 void initialTree(BTree *b){
32     insertTree(b,5);
33     insertTree(b,3);
34     insertTree(b,6);
35     insertTree(b,2);
36     insertTree(b,1);
37     insertTree(b,8);
38 }
39 int searchTree(BTree *b,int key,BTree *f,BTree *&p){
40     if(!b){
41         p = f;
42         printf("++%d
",p->data);
43         return 0;
44     }
45     else if( key == b->data){
46         p = b;
47         printf("--%d 
",p->data);
48         printf("找到元素key:%d
",key);
49         return 1;
50     }
51     else if(key > b->data)
52         return searchTree(b->rchild,key,b,p);
53     else
54         return searchTree(b->lchild,key,b,p);
55 }
56 bool insertTree(BTree *b,int key){
57     BTree *p,*s;
58     if(!searchTree(b,key,NULL,p)){
59         printf("%d 没有出现在树中,可以插入在%d之后
",key,p->data);
60         s = (BTree *)malloc(sizeof(BTree));
61         s->data = key;
62         s->lchild = s->rchild = NULL;
63         if(!b){
64             b = s;
65         }
66         else if(key < p->data){
67             p->lchild = s;
68         }else{ 
69             p->rchild = s;
70         }
71         return true;
72     }else
73         return false;
74 }
View Code

运行示例:

二叉排序树1第3张

免责声明:文章转载自《二叉排序树1》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇java.io.IOException: Received error packet: errno = 1236, sqlstate = HY000 errmsg = binlog truncated开发人员常用的10个Sublime Text插件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

二叉排序树

VonGang原创,转载请注明:http://www.cnblogs.com/vongang/ 二叉排序数的(递归)定义:1、若左子树非空,则左子树所有节点的值均小于它的根节点;2、若右子树非空,则右子树所有节点的值均大于于它的根节点;3、左右子树也分别为二叉排序树。 如图: 链表实现(比较简单): View Code #include <std...

九度oj 题目1467:二叉排序树

题目描述: 二叉排序树,也称为二叉查找树。可以是一颗空树,也可以是一颗具有如下特性的非空二叉树: 1. 若左子树非空,则左子树上所有节点关键字值均不大于根节点的关键字值;2. 若右子树非空,则右子树上所有节点关键字值均不小于根节点的关键字值;3. 左、右子树本身也是一颗二叉排序树。 现在给你N个关键字值各不相同的节点,要求你按顺序插入一个初始为空树的二...