建立一个二叉排序树,根据给定值对其实施查找
时间: 2023-04-24 18:01:08 浏览: 186
建立二叉排序树的过程如下:
1. 将第一个节点作为根节点。
2. 依次将后面的节点插入到树中,插入时按照二叉排序树的规则进行比较,小于当前节点则插入到左子树,大于当前节点则插入到右子树。
3. 插入完成后,就可以根据给定值对树进行查找了。
查找的过程如下:
1. 从根节点开始,将给定值与当前节点的值进行比较。
2. 如果给定值等于当前节点的值,则查找成功,返回该节点。
3. 如果给定值小于当前节点的值,则在左子树中继续查找。
4. 如果给定值大于当前节点的值,则在右子树中继续查找。
5. 如果左子树或右子树为空,则查找失败,返回空值。
需要注意的是,建立二叉排序树时要保证插入的节点不重复,否则会影响查找的结果。
相关问题
请写出该代码:建立一个顺序表,用顺序查找的方法对其实施查找; 再建立一个有序表,用折半查找的方法对其实施查找; 最后建立一个二叉排序树,根据给定值对其实施查找;
好的,我来为您编写这个代码。这里我使用C++语言。
首先,我们需要定义一个顺序表和一个有序表,并实现它们的查找功能:
```c++
#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN = 100;
int a[MAXN], b[MAXN];
// 顺序查找
int seq_search(int a[], int n, int x) {
for (int i = 0; i < n; i++) {
if (a[i] == x) return i;
}
return -1;
}
// 折半查找
int bin_search(int a[], int n, int x) {
int left = 0, right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (a[mid] == x) return mid;
else if (a[mid] > x) right = mid - 1;
else left = mid + 1;
}
return -1;
}
```
接下来,我们需要定义一个二叉排序树,并实现其查找功能:
```c++
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// 二叉排序树查找
bool bst_search(TreeNode* root, int x) {
if (!root) return false;
if (root->val == x) return true;
else if (root->val > x) return bst_search(root->left, x);
else return bst_search(root->right, x);
}
// 二叉排序树插入
TreeNode* bst_insert(TreeNode* root, int x) {
if (!root) return new TreeNode(x);
if (root->val > x) root->left = bst_insert(root->left, x);
else root->right = bst_insert(root->right, x);
return root;
}
```
最后,我们可以在 main 函数中建立一个顺序表、一个有序表和一个二叉排序树,并对它们进行查找:
```c++
int main() {
// 建立一个顺序表
int n = 10, x = 5;
for (int i = 0; i < n; i++) a[i] = i;
cout << seq_search(a, n, x) << endl;
// 建立一个有序表
for (int i = 0; i < n; i++) b[i] = i;
cout << bin_search(b, n, x) << endl;
// 建立一个二叉排序树
TreeNode* root = NULL;
for (int i = 0; i < n; i++) root = bst_insert(root, i);
cout << bst_search(root, x) << endl;
return 0;
}
```
这样,我们就完成了建立一个顺序表、用顺序查找的方法对其实施查找;再建立一个有序表、用折半查找的方法对其实施查找;最后建立一个二叉排序树,根据给定值对其实施查找的代码。
请用c语言写出该代码:建立一个顺序表,用顺序查找的方法对其实施查找; 再建立一个有序表,用折半查找的方法对其实施查找; 最后建立一个二叉排序树,根据给定值对其实施查找;
好的,这里是使用 C 语言的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义顺序表结构体
#define MAXN 100
typedef struct {
int data[MAXN];
int length;
} SeqList;
// 定义二叉排序树结构体
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 顺序查找
int seq_search(SeqList* L, int x) {
for (int i = 0; i < L->length; i++) {
if (L->data[i] == x) return i;
}
return -1;
}
// 折半查找
int bin_search(SeqList* L, int x) {
int left = 0, right = L->length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (L->data[mid] == x) return mid;
else if (L->data[mid] > x) right = mid - 1;
else left = mid + 1;
}
return -1;
}
// 二叉排序树查找
int bst_search(TreeNode* root, int x) {
if (!root) return 0;
if (root->val == x) return 1;
else if (root->val > x) return bst_search(root->left, x);
else return bst_search(root->right, x);
}
// 二叉排序树插入
TreeNode* bst_insert(TreeNode* root, int x) {
if (!root) {
root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = x;
root->left = NULL;
root->right = NULL;
}
else if (root->val > x) root->left = bst_insert(root->left, x);
else root->right = bst_insert(root->right, x);
return root;
}
int main() {
// 建立一个顺序表
SeqList L;
L.length = 10;
for (int i = 0; i < L.length; i++) L.data[i] = i;
printf("%d\n", seq_search(&L, 5));
// 建立一个有序表
SeqList M;
M.length = 10;
for (int i = 0; i < M.length; i++) M.data[i] = i;
printf("%d\n", bin_search(&M, 5));
// 建立一个二叉排序树
TreeNode* root = NULL;
for (int i = 0; i < L.length; i++) root = bst_insert(root, L.data[i]);
printf("%d\n", bst_search(root, 5));
return 0;
}
```
实现思路与之前的 C++ 代码相同,只是语法略有不同。