用c++代码完成以下编程1、根据给定的二叉树按照先序序列建立二叉树,写出先序扩展序列(#表示空指针); 2、实现二叉树的二叉链表存储表示; 3、先序遍历创建二叉树(递归算法); 4、先序遍历、中序遍历、后序遍历二叉树(递归算法)。
时间: 2024-12-23 07:23:12 浏览: 4
C/C++:由先序序列和中序序列创建二叉树.rar(含完整注释)
1. 在C++中,构建一个先序遍历并表示为扩展序列的函数可以这样实现:
```cpp
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// 先序遍历生成扩展序列
void buildPreOrder(TreeNode* root, string& seq, bool isFirst = true) {
if (root == nullptr) return;
if (!isFirst) seq += "#";
seq += to_string(root->val);
buildPreOrder(root->left, seq, false);
buildPreOrder(root->right, seq, false);
}
```
2. 对于二叉树的二叉链表存储表示,我们需要两个指向左右孩子的指针:
```cpp
class BinaryTree {
private:
TreeNode* root;
public:
BinaryTree() : root(nullptr) {}
// 添加节点并保持链表形式
void insertNode(int val) {
root = insertNodeRec(root, val);
}
// 递归插入节点
TreeNode* insertNodeRec(TreeNode* node, int val) {
if (node == nullptr) return new TreeNode(val);
if (val < node->val)
node->left = insertNodeRec(node->left, val);
else
node->right = insertNodeRec(node->right, val);
return node;
}
};
```
3. 递归的先序遍历:
```cpp
void preOrderTraversal(TreeNode* root) {
if (root != nullptr) {
cout << root->val; // 访问根节点
preOrderTraversal(root->left); // 遍历左子树
preOrderTraversal(root->right); // 遍历右子树
}
}
```
4. 递归的三种遍历方式:
- 先序遍历:上面已经给出
- 中序遍历:
```cpp
void inOrderTraversal(TreeNode* root) {
if (root != nullptr) {
inOrderTraversal(root->left);
cout << root->val;
inOrderTraversal(root->right);
}
}
```
- 后序遍历:
```cpp
void postOrderTraversal(TreeNode* root) {
if (root != nullptr) {
postOrderTraversal(root->left);
postOrderTraversal(root->right);
cout << root->val;
}
}
```
阅读全文