no worriesg 2023-12-26 14:35 采纳率: 75%
浏览 7
已结题

数据结构相关问题通过直接结题

img


第二道题希望详细的内容,我不太懂,如果能运行直接结题,看看我的通过率,希望各位能快点

  • 写回答

7条回答 默认 最新

  • 开发技术控 2023-12-26 14:38
    关注

    来 给你

    #include <iostream>
    #include <vector>
    
    struct TreeNode {
        int val;
        TreeNode* left;
        TreeNode* right;
        TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    };
    
    TreeNode* buildTree(std::vector<int>& inorder, std::vector<int>& postorder, int inStart, int inEnd, int postStart, int postEnd) {
        if (inStart > inEnd || postStart > postEnd) {
            return nullptr;
        }
    
        int rootVal = postorder[postEnd];
        TreeNode* root = new TreeNode(rootVal);
    
        int rootIndex = 0;
        for (int i = inStart; i <= inEnd; ++i) {
            if (inorder[i] == rootVal) {
                rootIndex = i;
                break;
            }
        }
    
        int leftSubtreeSize = rootIndex - inStart;
    
        root->left = buildTree(inorder, postorder, inStart, rootIndex - 1, postStart, postStart + leftSubtreeSize - 1);
        root->right = buildTree(inorder, postorder, rootIndex + 1, inEnd, postStart + leftSubtreeSize, postEnd - 1);
    
        return root;
    }
    
    void postorderTraversal(TreeNode* root) {
        if (root == nullptr) {
            return;
        }
    
        postorderTraversal(root->left);
        postorderTraversal(root->right);
        std::cout << root->val << " ";
    }
    
    void inorderTraversal(TreeNode* root) {
        if (root == nullptr) {
            return;
        }
    
        inorderTraversal(root->left);
        std::cout << root->val << " ";
        inorderTraversal(root->right);
    }
    
    int main() {
        std::vector<int> inorder = {4, 2, 8, 5, 1, 6, 9, 3, 7};
        std::vector<int> postorder = {4, 8, 5, 2, 9, 6, 7, 3, 1};
    
        int n = inorder.size();
        TreeNode* root = buildTree(inorder, postorder, 0, n - 1, 0, n - 1);
    
        std::cout << "后序遍历结果:";
        postorderTraversal(root);
        std::cout << std::endl;
    
        std::cout << "中序遍历结果:";
        inorderTraversal(root);
        std::cout << std::endl;
    
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月26日
  • 已采纳回答 12月26日
  • 创建了问题 12月26日

悬赏问题

  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题
  • ¥50 如何将脑的图像投影到颅骨上
  • ¥15 提问一个关于vscode相关的环境配置问题,就是输入中文但是显示不出来,代码在idea可以显示中文,但在vscode不行,不知道怎么配置环境
  • ¥15 netcore使用PuppeteerSharp截图
  • ¥20 这张图页头,页脚具体代码该怎么写?
  • ¥15 关于#sql#的问题,请各位专家解答!
  • ¥20 WPF MVVM模式 handycontrol 框架, hc:SearchBar 控件 Text="{Binding NavMenusKeyWords}" 绑定取不到值
  • ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂