二叉排序树(Binary Search Tree)
- 什么是BST:一棵树,左子树上的所有节点的值,都比根节点小;右子树上所有节点的值,都比根节点大;同时,这个性质是递归的。同时,树中的节点值不能重复。
- 如何构建BST:
假如有4,5,19,23,2,8这些数。
第一个数是根节点,从根节点开始,依次比大小,大放右边,小放左边。
实现
建立一个二叉排序树
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int data;
struct TreeNode* lchild;
struct TreeNode* rchild;
} TreeNode;
TreeNode* bstInsert(TreeNode** T, int key) {
if (*T == NULL) {
*T = (treeNode*)malloc(sizeof(TreeNode));
(*T) -> data = data;
(*T) -> lchild = NULL;
(*T) -> rchlid = NULL;
} else if (((*T) -> data) < data) {
bstInsert(&((*T) -> lchlid), data);
} else if (((*T) -> data) == data) {
return;
} else {
bstInsert(&((*T) -> rchlid), data);
}
}
void preOrder(TreeNode* T) {
if (T) {
printf("%d ", T -> data);
preOrder(T -> lchild);
preOrder(T -> rchild);
}
}
int main() {
TreeNode* T = NULL;
int nums[6] = {4,5,19,23,2,8};
for (int i = 0; i<6; i++) {
bstInsert(&T, nums[i]);
}
preOrder(T);
printf("\n");
return 0;
}
在二叉树中查找值
TreeNode* bstSearch(TreeNode* T, int data) {
if (T) {
if (T -> data == data) {
return T;
} else if (T -> data > data) {
return bstSearch(T -> lchild, data);
} else {
return bstSearch(T -> rchild, data);
}
} else {
return NULL;
}
}