使用C++,二叉树采用二叉链表存储,根据二叉树的先序遍历序列建立二叉树。 例如:根据先序遍历序列ABDG#L##HM###EIN##O###C#FJ##K##建立二叉树,其中,#表示空树。
时间: 2024-10-14 18:15:08 浏览: 70
在C++中,根据二叉树的先序遍历序列构建二叉树通常需要递归的方法。先序遍历的顺序是:根节点 -> 左子树 -> 右子树。这里是一个基本的步骤:
1. 首先,我们需要创建一个二叉树节点类,包含一个值(通常是字符)、左子节点和右子节点指针。
```cpp
struct TreeNode {
char val;
TreeNode* left;
TreeNode* right;
TreeNode(char v) : val(v), left(nullptr), right(nullptr) {}
};
```
2. 创建一个函数,用于根据给定的遍历序列生成树。这个函数接收一个字符串作为输入,并通过检查当前字符是否为'#'来判断是结束还是创建新的节点。
```cpp
TreeNode* buildTree(string preorder) {
if (preorder.empty()) return nullptr;
int index = 0;
TreeNode* root = new TreeNode(preorder[0]);
// 分离根节点和剩余的遍历序列
size_t start = 1;
while (start < preorder.size() && preorder[start] == '#') ++start;
// 递归地为左子树和右子树构造二叉树
if (start != preorder.size()) {
root->left = buildTree(preorder.substr(0, start));
index += start + 1; // 更新索引到下一个非空节点
}
if (index < preorder.size()) {
root->right = buildTree(preorder.substr(index));
}
return root;
}
```
3. 最后,你可以像这样使用上述`buildTree`函数:
```cpp
string preorder = "ABDG#L##HM###EIN##O###C#FJ##K##";
auto treeRoot = buildTree(preorder);
```
阅读全文