二叉排序树1

简介:

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

二叉树的遍历:

复制代码
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 #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\n",p->data);
43         return 0;
44     }
45     else if( key == b->data){
46         p = b;
47         printf("--%d \n",p->data);
48         printf("找到元素key:%d\n",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之后\n",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 }
复制代码

运行示例:

本文转自博客园xingoo的博客,原文链接:二叉排序树1,如需转载请自行联系原博主。
相关文章
|
缓存 NoSQL API
GraphQL(三)DataLoader 详解
本文为GraphQL DataLoader详解,主要包括批处理及缓存的相关内容。DataLoader是一个通用实用程序,用作应用程序数据获取层的一部分,通过和为各种远程数据源(如数据库或 Web 服务)提供简化且一致的 API
|
Rust 编译器 C语言
Rust安装手册
卸载 Rust 在任何时候如果您想卸载 Rust,您可以运行 rustup self uninstall。但我们会想念您的!
392 0
Rust安装手册
|
Dubbo 应用服务中间件 Nacos
Dubbo “Data length too large“ 问题
解决Dubbo “Data length too large“ 问题
359 0
|
弹性计算 Linux PHP
|
5月前
|
关系型数据库 MySQL Linux
查看Linux、Apache、MySQL、PHP版本的技巧
以上就是查看Linux、Apache、MySQL、PHP版本信息的方法。希望这些信息能帮助你更好地理解和使用你的LAMP技术栈。
269 17
|
6月前
|
人工智能 安全 API
AI 解决方案的安全控制设计与实施
AI 解决方案的安全控制设计与实施涵盖数据安全、模型安全、系统安全及合规治理四大领域。通过数据加密、访问控制、差分隐私等手段保障数据安全;采用对抗训练、联邦学习确保模型安全;利用容器化部署、可信执行环境维护系统安全;并遵循 GDPR 等法规,进行红队测试和应急响应,确保 AI 全生命周期的安全性与合规性。
Base64如何切割后面的内容,如何提取data:image/png;base64,之后的内容,Vue中.split中截取的数组如何使用数组进行获取
Base64如何切割后面的内容,如何提取data:image/png;base64,之后的内容,Vue中.split中截取的数组如何使用数组进行获取
|
存储 分布式计算 关系型数据库
Dataphin 提供公共云在线服务和线下独立部署(授权/订阅)两种服务模式。
Dataphin 提供公共云在线服务和线下独立部署(授权/订阅)两种服务模式。
388 2
【力扣经典面试题】80. 删除有序数组中的重复项 II
【力扣经典面试题】80. 删除有序数组中的重复项 II
|
敏捷开发 移动开发 前端开发
如何开一场高效的迭代排期会 | 敏捷开发落地指南
如何开一场高效的迭代排期会,高效落地敏捷开发,先从这3个关键活动着手,通过本文你将了解到什么是敏捷开发、什么是双周迭代、如何高效地开展排期会,以及如何在云效项目协作·Projex 中落地排期会相关事宜。
2355 0
如何开一场高效的迭代排期会 | 敏捷开发落地指南