写一份C++代码:创建二叉树,要求使用char函数: 1、先序遍历的结果是2(x+1)-x2; 2、请给出该二叉树的中序遍历和后序遍历;
时间: 2024-12-17 15:44:31 浏览: 3
首先,让我们创建一个二叉树节点类`TreeNode`,它包含一个字符值`val`和两个指向左右子节点的指针。然后,我们可以定义一个函数`buildTree(char str[], int start, int end)`来根据给定字符串构建二叉树,其中`str[]`是一个以'('开始,')'结束,中间由字符和'-'连接的字符串。
```cpp
#include <iostream>
using namespace std;
// 定义二叉树节点类
class TreeNode {
public:
char val;
TreeNode* left;
TreeNode* right;
TreeNode(char ch) : val(ch), left(nullptr), right(nullptr) {}
};
// 先序遍历,结果为2*(x+1) - x^2
void preorderTraversal(TreeNode* root, string& result) {
if (root == nullptr) return;
result += to_string(root->val); // 添加当前节点值到结果
preorderTraversal(root->left, result);
preorderTraversal(root->right, result);
}
// 中序遍历
void inorderTraversal(TreeNode* root, string& result) {
if (root == nullptr) return;
inorderTraversal(root->left, result);
result += to_string(root->val);
inorderTraversal(root->right, result);
}
// 后序遍历
void postorderTraversal(TreeNode* root, string& result) {
if (root == nullptr) return;
postorderTraversal(root->left, result);
postorderTraversal(root->right, result);
result += to_string(root->val);
}
// 根据字符串创建二叉树
TreeNode* buildTree(char str[], int start, int end) {
if (start > end) return nullptr;
int mid = find(str + start, str + end + 1, '-') - str; // 找到第一个'-'的位置作为分隔符
TreeNode* root = new TreeNode(str[start]);
root->left = buildTree(str, start + 1, mid - 1);
root->right = buildTree(str, mid + 2, end);
return root;
}
int main() {
char str[] = "2-(x+1)-(x^2)";
int n = strlen(str);
TreeNode* root = buildTree(str, 0, n - 1);
string result;
preorderTraversal(root, result); // 先序遍历结果: 2(x+1)-x^2
cout << "Preorder traversal: " << result << endl;
result.clear();
inorderTraversal(root, result); // 中序遍历结果
cout << "Inorder traversal: " << result << endl;
result.clear();
postorderTraversal(root, result); // 后序遍历结果
cout << "Postorder traversal: " << result << endl;
delete root; // 清理内存
return 0;
}
```
阅读全文