c++进行树创建,通过createtree函数实现树创建,preorder函数输出树的前序遍历序列,postorder输出树的后序遍历序列
时间: 2024-10-20 14:05:06 浏览: 32
在C++中,创建二叉树并实现前序(Pre-order)和后序(Post-order)遍历通常涉及定义一个树节点类以及相关的递归算法。这里是一个简单的例子:
首先,我们可以定义一个`TreeNode`类来表示树的节点:
```cpp
class TreeNode {
public:
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
```
然后,我们创建一个函数`createTree`用于构建树。这个函数可以根据输入的值序列构造树结构,假设值序列是以某种形式给出的,比如数组或列表。
```cpp
TreeNode* createTree(vector<int>& values) {
if (values.empty()) return nullptr;
TreeNode* root = new TreeNode(values[0]);
stack<TreeNode*> s;
for (int i = 1; i < values.size(); ++i) {
TreeNode* node = new TreeNode(values[i]);
if (!s.empty() && values[i] < s.top()->val) {
s.top()->right = node;
} else {
while (!s.empty() && values[i] > s.top()->val) {
root = s.top();
s.pop();
}
if (!s.empty()) {
s.top()->left = node;
} else {
s.push(root);
}
}
}
return root;
}
```
接下来,我们编写前序遍历(Pre-order)和后序遍历(Post-order)的递归函数:
```cpp
void preOrder(TreeNode* node) {
if (node != nullptr) {
cout << node->val << " ";
preOrder(node->left);
preOrder(node->right);
}
}
void postOrder(TreeNode* node) {
if (node != nullptr) {
postOrder(node->left);
postOrder(node->right);
cout << node->val << " ";
}
}
```
你可以像这样使用它们:
```cpp
int main() {
vector<int> treeValues = {5, 3, 7, 2, 4, 6, 8};
TreeNode* root = createTree(treeValues);
cout << "前序遍历结果: ";
preOrder(root);
cout << endl;
cout << "后序遍历结果: ";
postOrder(root);
cout << endl;
// 清理内存
deleteNode(root);
return 0;
}
```
阅读全文