前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >二叉排序树1

二叉排序树1

作者头像
用户1154259
发布于 2018-01-17 11:16:29
发布于 2018-01-17 11:16:29
75200
代码可运行
举报
运行总次数:0
代码可运行

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

二叉树的遍历:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void InOrderTree(BTree *b){
    if( !b )
        return;
    InOrderTree(b->lchild);
    printf("%d ",b->data);
    InOrderTree(b->rchild);
}

二叉树的查找:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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);
}

二叉树的插入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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;
}

全部代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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 }

运行示例:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014-04-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
二叉排序树的删除操作
算法思想 二叉排序树,删除操作主要针对三种情况。 1 叶子节点-直接删除就可以了 2 没有左孩子的节点-直接嫁接右子树就可以了(没有右孩子的节点-直接嫁接左子树就可以了) 3 如果左右子树都存在,则寻找删除节点的直接前驱(即左子树里面的最右的节点) 编程时需要注意,函数时针对指针的操作,因此为了修改指针,要使用二级指针传参才可以 例如: void delete(BinaryTree **b){   .... } int main(){   BinaryTree *b = (BinaryTree *)
用户1154259
2018/01/17
3.7K0
二叉排序树的删除操作
二叉树
定义:二叉树是有限结点的集合 二叉树有五种形态,有四种表示方法,其中括号表示法是最重要的,下面的链式存储结构也是根据括号表示法来的== 二叉树的性质: 性质1:非空二叉树上的叶子节点数等于双分支节点数加1 性质2:非空二叉树的第i层上最多有2(i-1)个结点 性质3:高度位h的二叉树最多有2(h)-1个结点
废江_小江
2022/09/05
3180
二叉树
数据结构 二叉排序树
二叉排序树中查找某关键字时,查找过程类似于次优二叉树,在二叉排序树不为空树的前提下,首先将被查找值同树的根结点进行比较,会有 3 种不同的结果:
Meng小羽
2019/12/23
5890
数据结构上机——判断二叉排序树
此题难度较大 有两个主要问题 1、虚结点的存在需要导致分类 2、一种特殊情况:p的左孩子的右孩子大于p,我的做法是通过一个数组来记录祖先的数值,应该可以有更好的方法。 附:验证数据 5 3 7 2 4 4 8-1
zstar
2022/06/14
1980
数据结构上机——二叉排序树的优化版本
书接上回 上篇博客 采用了数组记录 的确不太妥当 并且在层数较多时不适用 这里采用了新的一种链表思路 参考 这篇文章
zstar
2022/06/14
1970
二叉排序树的查找(插入、删除)
二叉排序树的查找(插入、删除) 近期逐步开始期末复习,在博客上投入的精力将大幅减少大概一月左右! /*二叉树的二叉链表结点结构定义*/ typedef struct BiTNode{ //结点结构 int data; //结点数据 struct BiTNode *lchild, *rchild;//左右孩子指针 }BiTNode, *BiTree; /*递归查找二叉排序树T中是否存在key, 指针f指向T的双亲,其初始调用
李志伟
2019/12/17
3180
查找算法之顺序查找,折半查找,二叉查找树
  查找表是由同一类型的数据元素构成的集合。例如电话号码簿和字典都可以看作是一张查找表。   在查找表中只做查找操作,而不改动表中数据元素,称此类查找表为静态查找表;反之,在查找表中做查找操作的同时进行插入数据或者删除数据的操作,称此类表为动态查找表。
嵌入式与Linux那些事
2021/05/20
1.7K0
查找算法之顺序查找,折半查找,二叉查找树
二叉树四种遍历,根据前中,后中遍历序列求二叉树
采用指针+结点来存储二叉树,链表栈也是如此, BTNode本身也是一个指针节点,可以指向和其一样结构的地址,所以,struct结构体中的结点也是struct结构体类型
废江_小江
2022/09/05
2360
剑指OFFER之二叉搜索树与双向链表(九度OJ1503)
题目描述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 输入: 输入可能包含多个测试样例。 对于每个测试案例,输入的第一行为一个数n(0<n<1000),代表测试样例的个数。 接下来的n行,每行为一个二叉搜索树的先序遍历序列,其中左右子树若为空则用0代替。 输出: 对应每个测试案例, 输出将二叉搜索树转换成排序的双向链表后,从链表头至链表尾的遍历结果。 样例输入: 1 2 1 0 0 3 0 0 样例输出: 1 2 3 解题思路:   
用户1154259
2018/01/18
8580
剑指OFFER之二叉搜索树与双向链表(九度OJ1503)
二叉排序树的创建和插入----二叉查找树
二叉排序树概念 c++类的定义 二叉排序树的插入 二叉排序树的构造 下面演示两种不同的方式实现二叉树的插入和构建 法1: #include<iostream> using namespace std;
大忽悠爱学习
2021/04/02
7310
二叉排序树的创建和插入----二叉查找树
二叉排序树(BSTree)关于查找算法结合
/*基于树的顺序查找法*/ /*二叉排序树的存储结构*/ typedef struct node { KeyType key; /*关键字的值*/ struct node *lchild, *rchild; /*左右指针*/ } NSTNode, *BSTree; /*二叉排序树插入递归算法*/ void InsertBST(BSTree *bst, KeyType key) { BiTree s; if(*bst == NU
Steve Wang
2018/02/05
8820
二叉树的应用详解 - 数据结构
1、排序树——特点:所有结点“左小右大 2、平衡树——特点:所有结点左右子树深度差≤1 3、红黑树——特点:除了具备二叉查找树的特性外还有5个特性以致保持自平衡。 4、字典树——由字符串构成的二叉排序树 5、判定树——特点:分支查找树(例如12个球如何只称3次便分出轻重) 6、带权树——特点:路径带权值(例如长度) 7、最优树——是带权路径长度最短的树,又称 Huffman树,用途之一是通信中的压缩编码。
黄规速
2022/04/14
1.4K0
二叉树的应用详解 - 数据结构
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
二叉树是树形结构的一种特殊形式,它的每个节点最多有两个子节点,分别称为左子节点和右子节点,对应的子树就是左子树和右子树。二叉树可以为空(即没有节点),也可以由根节点、左子树和右子树组成复杂的树形结构,这种结构在很多数据处理场景中有着重要应用,例如表达式解析、文件系统目录结构模拟、搜索算法实现等。
Rossy Yan
2024/12/27
2150
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
二叉排序树
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
喜欢ctrl的cxk
2019/11/08
4610
数据结构与算法-二叉排序树
一棵二叉排序树(Binary Sort Tree)(又称二叉查找树)或者是一棵空二叉树,或者是具有下列性质的二叉树:
越陌度阡
2020/11/26
4190
数据结构与算法-二叉排序树
二叉树前中后遍历
#include #include typedef char ElemType;//二叉树数组类型为字符 //二叉树定义 typedef struct node { ElemType data;//节点信息 struct node* lchild, * rchild;//左右儿子,增加,*parent双亲指针就是三叉链 }Bnode,*BTree; //初始化二叉链 void InitBTree(BTree& BT) { BT = NULL; } //创建二叉链 void CreateBTree
川川菜鸟
2021/10/18
2270
排序二叉树及其遍历「建议收藏」
所谓建立排序二叉树就是,就是将各结点数据元素顺序插到一棵二叉树中,在插入的过程中,始终保持二叉树中每个结点的值都大于其左子树上每个结点的值,而小于或等于其右子树上每个结点的值,每个结点信息包括结点数据(结点值)、左子树指针、右子树指针。
全栈程序员站长
2022/09/15
3160
西电数据结构上机题——统计二叉树结点
网上查了查,发现类似统计二叉树结点用的函数都是void打头,意味着这些算法都是不断递归,然后靠着全局计数器。 然而西电这道题函数返回限定类型为int,意味着要处理递归时候的变量增加问题,着实耗费了我不少头发,哈哈!
zstar
2022/06/14
2160
前端进阶必备的二叉树知识
1. 有一颗树的括号表示为A(B, C(E, F(G)), D),回答下面的问题: 指出树的根结点? 指出棵树的所有叶子结点? 结点C的度是多少? 这棵树的度为多少? 这棵树的高度是多少? 结点C的孩子结点是哪? 结点C的双亲结点是谁? 答案: 这棵树的根结点为A 这棵树的叶子结点为B丶E丶G丶D // 叶子结点:一棵树当中没有子结点(即度为0)的结点称为叶子结点,简称“叶子”。叶子是指出度为0的结点,又称为终端结点。 结点C的度为2 // 结点度:结点拥有子结点的数量 这棵树的度是3 // 二叉树的度:
用户7188259
2020/04/11
1.1K0
那些未说出口的告白,终会顺着线索遍历到你的心底——数据结构算法之树算法习题试炼
求某层的结点个数、每层的结点个数、树的最大宽度等,都可采用与此题类似的思想。当然,此题可编写为递归算法,其实现如下:
盛透侧视攻城狮
2025/03/10
790
那些未说出口的告白,终会顺着线索遍历到你的心底——数据结构算法之树算法习题试炼
推荐阅读
相关推荐
二叉排序树的删除操作
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验