二叉排序树
二叉排序树是一种特殊的二叉树,它的每个节点最多只有两个子节点,分别称为左子节点和右子节点。与其他二叉树相比,二叉排序树具有以下特点:
- 每个节点都只有一个父节点和两个子节点,且左子节点和右子节点的顺序是固定的。
- 根节点(或称为主节点)是具有两个子节点的节点,其余节点都只有一个子节点。
二叉排序树的应用非常广泛,特别是在计算机科学领域。它可以用于文件系统的排序、查找和删除操作,还可以用于构建各种数据结构和算法。
下面给出一个二叉排序树的实例,并介绍如何使用递归实现树的插入、删除和查找操作:
#include <iostream>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode() : val(0), left(nullptr), right(nullptr) {}
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
TreeNode(int x, TreeNode *left, TreeNode *right, TreeNode *parent) : val(x), left(left), right(right), parent(parent) {}
};
void printBinaryTree(TreeNode *root) {
if (root == nullptr) {
return;
}
printBinaryTree(root->left);
printBinaryTree(root->right);
cout << root->val << " ";
}
void inorderInsert(TreeNode *root, int key) {
if (root == nullptr) {
return;
}
if (key < root->val) {
root->left = inorderInsert(root->left, key);
} else if (key > root->val) {
root->right = inorderInsert(root->right, key);
} else {
cout << root->val << " ";
}
}
void preorderInsert(TreeNode *root, int key) {
if (root == nullptr) {
return;
}
cout << root->val << " ";
inorderInsert(root->left, key);
inorderInsert(root->right, key);
}
void searchBinaryTree(TreeNode *root, int key) {
if (root == nullptr || root->val == key) {
return;
}
searchBinaryTree(root->left, key);
searchBinaryTree(root->right, key);
cout << root->val << " ";
}
int main() {
TreeNode root = new TreeNode(4);
root->left = new TreeNode(2);
root->right = new TreeNode(6);
root->left->left = new TreeNode(1);
root->left->right = new TreeNode(3);
root->right->left = new TreeNode(5);
root->right->right = new TreeNode(7);
cout << "Inorder insertion: ";
inorderInsert(root, 1);
inorderInsert(root, 3);
inorderInsert(root, 5);
cout << endl;
cout << "Preorder insertion: ";
preorderInsert(root, 2);
cout << endl;
cout << "Search for key 4: ";
searchBinaryTree(root, 4);
cout << endl;
return 0;
}
通过这个实例可以了解到二叉排序树的实现方法以及如何使用递归实现树的插入、删除和查找操作。
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦