目录
什么是二叉排序树?
(大白话)一棵树的左子树若不为空,则左子树上的所有节点的值都小于根节点;
若右子树不为空,则右子树上的所有节点的值都大于根节点;
左子树和右子树也为二叉排序树;同时树中的节点值不重复。
二叉排序树的构建
数据结构定义:
typedef struct TreeNode{
int data;
TreeNode* lchild;
TreeNode* rchild;
}TreeNode;
二叉排序树的构建:
二叉排序树的构建可以理解为一个插入的过程。代码如下:
//由于要在函数中修改实参*T的值,因此传入二级指针
void bstInsert(TreeNode** T, int data){
if(*T == NULL){ //递归出口,创建节点
*T = (TreeNode *)malloc(sizeof(TreeNode));
(*T)->data = data;
(*T)->lchild = NULL;
(*T)->rchild = NULL;
}
else if((*T)->data == data)return;
else if((*T)->data < data){ //递归左子树
bstInsert(&((*T)->lchild), data);
}
else{
bstInsert(&((*T)->rchild), data); //递归右子树
}
}
二叉搜索树的搜索:
TeeNode* bstSearch(TreeNode* T, int data){
if(T == NULL)return NULL;
else if(T->data == data)return T;
else if(T->data > data)return bstSearch(T->lchild, data);
else return bstSearch(T->rchild, data);
}