二叉树
二叉搜索树的定义
- 二叉树搜索树是基于二叉树和二分算法研究出来的一种特殊结构
- 二叉树的左子树比根节点要小 右子树比根节点要大
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/7c732f45135401deaa4001e6381f97ac.png)
代码
#include<stdio.h>
#include<stdlib.h>
typedef struct BstNode{
int data;
struct BstNode* left;
struct BstNode* right;
}BstNode;
BstNode* Insert(BstNode* root,int data);
BstNode* GetNewNode(int data);
int Search(BstNode* root, int data);
int main()
{
BstNode * Proot;
Proot = NULL;
Proot = Insert(Proot,15);
Proot = Insert(Proot,10);
Proot = Insert(Proot,20);
Proot = Insert(Proot,25);
Proot = Insert(Proot,8);
Proot = Insert(Proot,12);
int number;
printf("Enter number be searched\n");
scanf("%d",&number);
if(Search(Proot, number) == 1) printf("Found\n");
else printf("Not Found\n");
return 0;
}
BstNode* GetNewNode(int data)
{
BstNode* newNode = (BstNode*)malloc(sizeof(BstNode));
(*newNode).data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
BstNode* Insert(BstNode* root,int data)
{
if( root == NULL){
root = GetNewNode(data);
}else if( data <= root->data){
root->left = Insert(root->left, data);
}else {
root->right = Insert(root->right ,data);
}
return root;
}
int Search(BstNode* root, int data)
{
if(root == NULL) return 0;
else if(root->data == data) return 1;
else if( data <= root->data) return Search(root->left, data);
else return Search(root->right, data);
}
int FindMin(BstNode* root)
{
if(root == NULL) return root->data;
else{
root = root->left;
return FindMin(root);
}
}
核心代码
BstNode* GetNewNode(int data)
{
BstNode* newNode = (BstNode*)malloc(sizeof(BstNode));
(*newNode).data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
BstNode* Insert(BstNode* root,int data)
{
if( root == NULL){
root = GetNewNode(data);
}else if( data <= root->data){
root->left = Insert(root->left, data);
}else {
root->right = Insert(root->right ,data);
}
return root;
}
运行结果
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/608e103095a629122e2c952a49712f4e.png)