本文章主要介绍二叉搜索树的概念以及二叉搜索树的相关操作:按值插入、按值查找、按值删除。
1. 二叉搜索树的概念
二叉搜索树又称为二叉排序树,它或者是一棵空树,或者具有如下性质的二叉树:
(1)若它的左子树不为空,则左子树上的所有节点值都小于根节点的值。
(2)若它的右子树不为空,则右子树上的所有节点值都大于根节点的值。
(3)它的左右子树也为二叉搜索树。
画图举例关于二叉搜索树:
2. 二叉搜索树前期准备工作
二叉搜索树的特点:左子树值小于根节点值,根节点值小于右子树值。
2.1 头文件search_tree.h
二叉搜索树是以链表的形式组织起来,二叉搜索树节点的结构体类型包括:节点值,节点的左子树的指向、节点的右子树的指向。
//二叉搜索树
#pragma once
//用于测试打印函数名
#define HEADER printf("===========%s=========\n",__FUNCTION__);
//便于代码的修改,重定义二叉搜索树节点的元素类型
typedef char SearchNodeType;
//定义二叉搜索树的节点的结构体类型
typedef struct SearchNode
{
SearchNodeType data;
struct SearchNode* lchild;
struct SearchNode* rchild;
}SearchNode;
//函数声明
void SearchTreeInit(SearchNode** proot);
void SearchTreeDestroy(SearchNode** proot);
void DestroySearchNode(SearchNode* root);
2.2 初始化
初始化二叉搜索树,即将二叉搜索树初始化为空树,故将指向二叉搜索树的指针置为NULL。
//1.初始化
//思路:初始化二叉搜索树即二叉搜索树为空树,故将其根节点置为NULL即可
void SearchTreeInit(SearchNode** proot)
{
//非法输入
if(proot==NULL)