给出一棵二叉树的中序与后序排列。求出它的先序排列。约定树结点用不同的大写字母表示长度≤8。c++代码
以下是用C++编写的代码,可以实现给定二叉树的中序、后序和先序排列:
#include <iostream>
#include <string>
using namespace std;
struct TreeNode {
char val;
TreeNode* left;
TreeNode* right;
TreeNode(char x) : val(x), left(NULL), right(NULL) {}
};
int findIndex(string str, char target) {
for (int i = 0; i < str.length(); i++) {
if (str[i] == target) {
return i;
}
}
return -1;
}
TreeNode* buildTree(string inorder, string postorder) {
if (inorder.empty() || postorder.empty()) {
return NULL;
}
char rootVal = postorder[postorder.length() - 1];
TreeNode* root = new TreeNode(rootVal);
int rootIndex = findIndex(inorder, rootVal);
string leftInorder = inorder.substr(0, rootIndex);
string rightInorder = inorder.substr(rootIndex + 1);
string leftPostorder = postorder.substr(0, rootIndex);
string rightPostorder = postorder.substr(rootIndex, postorder.length() - rootIndex - 1);
root->left = buildTree(leftInorder, leftPostorder);
root->right = buildTree(rightInorder, rightPostorder);
return root;
}
void preorderTraversal(TreeNode* root) {
if (root != NULL) {
cout << root->val << " ";
preorderTraversal(root->left);
preorderTraversal(root->right);
}
}
int main() {
string inorder = "DBEAFC";
string postorder = "DEBFCA";
TreeNode* root = buildTree(inorder, postorder);
cout << "Preorder traversal: ";
preorderTraversal(root);
return 0;
}
在以上代码中,我们首先定义了一个TreeNode结构来表示二叉树的节点。然后,我们实现了一个findIndex函数,用于在中序排列中找到根节点的索引。接下来,我们使用buildTree函数来构建二叉树。该函数根据中序排列和后序排列的字符串来递归地构造二叉树。最后,我们使用preorderTraversal函数来打印先序排列。
在main函数中,我们给出了一个示例的中序排列inorder和后序排列postorder。然后,我们调用buildTree函数构建二叉树,并使用preorderTraversal函数打印先序排列
原文地址: https://www.cveoy.top/t/topic/hQYw 著作权归作者所有。请勿转载和采集!