以下是用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函数打印先序排列

给出一棵二叉树的中序与后序排列。求出它的先序排列。约定树结点用不同的大写字母表示长度≤8。c++代码

原文地址: https://www.cveoy.top/t/topic/hQYw 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录