编写二叉排序树的操作函数,并在main主函数中依次调用基本操作函数。①建立二叉排序树。②二叉排序树的插入。③二叉排序树的查找。④树的遍历。注意什么
时间: 2024-02-13 07:02:10 浏览: 66
好的,这是一个关于二叉排序树的问题。我会尽力回答你的问题。
首先,二叉排序树是一种特殊的二叉树,它的每个节点都包含一个关键字,且满足左子树的关键字都小于根节点的关键字,右子树的关键字都大于根节点的关键字。二叉排序树具有以下性质:
1. 对于二叉排序树中的任意节点,它的左子树中的所有节点的关键字都小于该节点的关键字,右子树中的所有节点的关键字都大于该节点的关键字;
2. 对于二叉排序树中的任意节点,它的左子树和右子树也是二叉排序树。
接下来,我们来分别实现建立二叉排序树、二叉排序树的插入、二叉排序树的查找和树的遍历。
建立二叉排序树的函数实现:
```
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
TreeNode* createBST(vector<int>& nums) {
if (nums.empty()) {
return NULL;
}
TreeNode* root = new TreeNode(nums[0]);
for (int i = 1; i < nums.size(); i++) {
TreeNode* cur = root;
while (cur) {
if (nums[i] < cur->val) {
if (cur->left) {
cur = cur->left;
} else {
cur->left = new TreeNode(nums[i]);
break;
}
} else {
if (cur->right) {
cur = cur->right;
} else {
cur->right = new TreeNode(nums[i]);
break;
}
}
}
}
return root;
}
```
二叉排序树的插入函数实现:
```
TreeNode* insertBST(TreeNode* root, int val) {
if (!root) {
return new TreeNode(val);
}
if (val < root->val) {
root->left = insertBST(root->left, val);
} else if (val > root->val) {
root->right = insertBST(root->right, val);
}
return root;
}
```
二叉排序树的查找函数实现:
```
bool searchBST(TreeNode* root, int val) {
if (!root) {
return false;
}
if (root->val == val) {
return true;
} else if (root->val > val) {
return searchBST(root->left, val);
} else {
return searchBST(root->right, val);
}
}
```
树的遍历函数实现:
```
void inorderTraversal(TreeNode* root) {
if (root) {
inorderTraversal(root->left);
cout << root->val << " ";
inorderTraversal(root->right);
}
}
void preorderTraversal(TreeNode* root) {
if (root) {
cout << root->val << " ";
preorderTraversal(root->left);
preorderTraversal(root->right);
}
}
void postorderTraversal(TreeNode* root) {
if (root) {
postorderTraversal(root->left);
postorderTraversal(root->right);
cout << root->val << " ";
}
}
```
在 main 函数中调用这些函数:
```
int main() {
vector<int> nums = {5, 3, 7, 2, 4, 6, 8};
TreeNode* root = createBST(nums);
inorderTraversal(root);
cout << endl;
preorderTraversal(root);
cout << endl;
postorderTraversal(root);
cout << endl;
insertBST(root, 1);
inorderTraversal(root);
cout << endl;
insertBST(root, 9);
inorderTraversal(root);
cout << endl;
cout << searchBST(root, 4) << endl;
cout << searchBST(root, 10) << endl;
return 0;
}
```
需要注意以下几点:
1. 建立二叉排序树时,需要注意处理 nums 为空的情况。
2. 插入元素时,需要递归寻找插入位置。
3. 查找时,需要递归查找。
4. 遍历时,需要注意遍历顺序。
以上是关于二叉排序树的基本操作函数的实现和使用方法,希望能对你有所帮助。
阅读全文