编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。例如如下的先序遍历字符串:abc##de#g##f
时间: 2023-06-05 09:08:33 浏览: 134
二叉树的几种操作,包括递归先序建立二叉树、先序遍历、中序遍历、后序遍历、非递归的各种遍历
,可以建立如下的二叉树:
```
a
/ \
b c
```
实现过程可以使用递归的方法,即先读入一个字符,如果该字符为空或者遇到叶子节点,则返回空指针。否则,以该字符创建一个节点,然后递归创建其左子树和右子树。最后返回该节点。
具体实现可以参考以下代码:
```
#include <iostream>
using namespace std;
// 定义二叉树的结构体
struct TreeNode {
char val;
TreeNode* left;
TreeNode* right;
TreeNode(char c): val(c), left(NULL), right(NULL) {}
};
// 通过递归建立二叉树
TreeNode* buildTree() {
char c;
cin >> c;
if (c == '#' || c == '\0') {
return NULL;
}
TreeNode* root = new TreeNode(c);
root->left = buildTree();
root->right = buildTree();
return root;
}
// 遍历二叉树进行测试
void preOrder(TreeNode* root) {
if (root) {
cout << root->val << " ";
preOrder(root->left);
preOrder(root->right);
}
}
int main() {
cout << "请输入先序遍历字符串:" << endl;
// 输入的字符串需要以空格或回车分隔每个字符
TreeNode* root = buildTree();
cout << "构建的二叉树如下:" << endl;
preOrder(root);
cout << endl;
return 0;
}
```
阅读全文