对于线索二叉树的建立和遍历请写出完整c++代码
时间: 2024-11-25 10:12:43 浏览: 11
线索二叉树是一种用于存储和操作二叉搜索树的数据结构,它在每个节点处添加了两个指针,除了常规的左孩子和右孩子之外,还有前驱和后继指针。这样可以辅助查找、插入和删除操作,并保持线索二叉树的性质。
以下是一个简单的C++代码示例,包括线索二叉树的创建(构造函数),以及对线索二叉树的前序遍历:
```cpp
#include <iostream>
// 定义二叉树节点
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode* prev; // 前驱指针
TreeNode* next; // 后继指针
};
// 构造函数,初始化线索二叉树
TreeNode* createTreapNode(int val) {
TreeNode* node = new TreeNode();
if (node == nullptr) {
return nullptr;
}
node->val = val;
node->prev = nullptr;
node->next = nullptr;
return node;
}
// 插入节点到线索二叉树
TreeNode* insertIntoTreap(TreeNode*& root, int val) {
if (root == nullptr) {
root = createTreapNode(val);
return root;
}
if (val < root->val) {
root->left = insertIntoTreap(root->left, val);
root->left->prev = root;
if (root->left->right != nullptr) {
root->left->right->prev = root->left;
}
if (root->prev == nullptr || val < root->prev->val) {
std::swap(root, root->prev);
}
} else {
root->right = insertIntoTreap(root->right, val);
root->right->next = root;
if (root->right->left != nullptr) {
root->right->left->next = root->right;
}
if (root->next == nullptr || val > root->next->val) {
std::swap(root, root->next);
}
}
return root;
}
// 前序遍历线索二叉树
void preOrderTraversal(TreeNode* root) {
if (root == nullptr) {
return;
}
std::cout << root->val << " ";
preOrderTraversal(root->left);
preOrderTraversal(root->right);
}
int main() {
TreeNode* root = nullptr;
root = insertIntoTreap(root, 50); // 插入一些节点
// ... 其他插入操作 ...
std::cout << "前序遍历结果: ";
preOrderTraversal(root);
return 0;
}
```
阅读全文