给定一个字符序列,请按照先序遍历的顺序构建对应的二叉树,其中‘#’表示空。然后
时间: 2024-02-18 19:05:20 浏览: 60
好的,可以使用递归的方式来构建二叉树。具体实现可以参考以下代码:
```
#include <iostream>
#include <string>
using namespace std;
struct TreeNode {
char val;
TreeNode* left;
TreeNode* right;
TreeNode(char x) : val(x), left(NULL), right(NULL) {}
};
TreeNode* buildTree(string s, int& i) {
if (i >= s.size()) {
return NULL;
}
if (s[i] == '#') {
i++;
return NULL;
}
TreeNode* root = new TreeNode(s[i]);
i++;
root->left = buildTree(s, i);
root->right = buildTree(s, i);
return root;
}
void preOrder(TreeNode* root) {
if (root == NULL) {
return;
}
cout << root->val << " ";
preOrder(root->left);
preOrder(root->right);
}
int main() {
string s = "ABD##E##CF##G##";
int i = 0;
TreeNode* root = buildTree(s, i);
preOrder(root);
return 0;
}
```
上述代码中,我们首先定义了一个 `TreeNode` 结构体,用来表示二叉树的节点。然后,我们定义了一个 `buildTree` 函数,用来根据给定的字符序列构建对应的二叉树。在 `buildTree` 函数中,我们首先判断当前字符是否为 `#`,如果是,则表示当前节点为 NULL;否则,我们创建一个新的节点,并递归构建其左右子树。最后,我们在 `main` 函数中调用 `buildTree` 函数构建二叉树,并调用 `preOrder` 函数实现先序遍历输出节点值。
运行以上代码,输出结果为:A B D E C F G
阅读全文