m0_63916931 2022-10-13 00:59 采纳率: 50%
浏览 79
已结题

数据结构二叉树看图看图

img

img

用c语言
帮我注释详细一点 谢谢 看图 asdfghjzkahdkxbsldbxlsvsoxbd

  • 写回答

1条回答 默认 最新

  • 快乐鹦鹉 2022-10-13 08:23
    关注
    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    #include <string.h>
    #include <queue>
    using namespace std;
    
    const int maxn = 30;
    char postOrder[maxn] = { 0 };
    char inOrder[maxn] = { 0 };
    
    struct node {
        int data;
        node* lchild;
        node* rchild;
    };
    
    // 根据后序序列和中序序列还原一棵二叉树
    node* create(int postL, int postR, int inL, int inR) {
        if (postL > postR) return nullptr;
    
        node* root = new node;
        root->data = postOrder[postR];
    
        int k; 
        for (k = inL; k <= inR; ++k) {
            if (inOrder[k] == postOrder[postR]) {
                break; // 在中序区间中找到了根节点的位置
            }
        }
        int numLeft = k - inL;    // 偏移量
        
        // 注意此处对左子树区间和右子树区间的划分,根据关键的偏移量来划分的结果
        root->lchild = create(postL, postL + numLeft - 1, inL, k - 1);
        root->rchild = create(postL + numLeft, postR - 1, k + 1, inR);
    
        return root;
    }
    
    // 层序遍历
    void LayerOrder(node* root) {
        queue<node*> q;
        q.push(root);
        bool isFirstNode = true;
        while (!q.empty()) {
            node* top = q.front();
            q.pop();
    
            if (isFirstNode) {
                printf("%c", top->data);
                isFirstNode = false;
            }
            else {
                printf("%c", top->data);
            }
    
            if (top->lchild != nullptr) q.push(top->lchild);
            if (top->rchild != nullptr) q.push(top->rchild);
        }
    }
    
    int main() {
        scanf("%s", inOrder);
        scanf("%s", postOrder);
        LayerOrder(create(0, strlen(inOrder) - 1, 0, strlen(inOrder) - 1));
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 10月21日
  • 已采纳回答 10月13日
  • 创建了问题 10月13日

悬赏问题

  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目