花辞树dor 2023-01-27 19:06 采纳率: 100%
浏览 18
已结题

【GPLT二阶】L2-006 树的遍历 部分正确

题目

img

地址:https://pintia.cn/problem-sets/994805046380707840/exam/problems/994805069361299456
错误信息

img

代码内容

#include <iostream>
#include <cstring>
#include <stdlib.h>
using namespace std;

int n; //二叉树结点个数

typedef struct biTreeNode { //定义二叉树结点
    char key;
    biTreeNode* lchild;
    biTreeNode* rchild;
}biTree, * BiTree;

void creatBiTree(BiTree& T, string post, string in) //建立二叉树:根节点地址,该树后序遍历序列,该树中序遍历序列
{
    if (post.length() == 0 && in.length() == 0)T = NULL;
    else {
        if (!(T = (biTreeNode*)malloc(sizeof(biTreeNode))))
        {
            exit(0);
        }
        T->key = post[post.size() - 1]; //当前结点键值等于后序遍历序列的最后一个值
        int k = in.find(T->key, 0); //中序遍历序列中根结点key对应的下标,同时也是左子树结点个数
        string inleft(in, 0, k);
        string postleft(post, 0, k);
        creatBiTree(T->lchild, postleft, inleft);
        //右子树结点个数=中序/后序遍历序列的长度-左子树结点个数-1,即in.length()-k-1或post.length()-k-1
        string inright(in, k + 1, in.length() - k - 1);
        string postright(post, k, post.length() - k - 1);
        creatBiTree(T->rchild, postright, inright);
    }
    return;
}

void FloorPrint(BiTree &T) //对二叉树层序遍历
{
    BiTree temp[30];//储存二叉树的结点地址
    int l = 0, r = 0; //l指向入队下标,r指向出队下标
    temp[l++] = T; //记录二叉树根结点地址
    while (r<l) {
        cout << temp[r]->key;
        if (r < n - 1)
            cout << " "; //输出键值,根据情况输出空格
        if (temp[r]->lchild) //让不为空的子树入队
            temp[l++] = temp[r]->lchild;
        if (temp[r]->rchild)
            temp[l++] = temp[r]->rchild;
        r++;
    }
}

int main()
{
    cin >> n; getchar();
    string inOrder, postOrder;
    char ch;
    for (int i = 0; i < n; i++) { //获取后序遍历序列
        cin >> ch; getchar();
        postOrder += ch;
    }
    for (int i = 0; i < n; i++) { //获取中序遍历序列
        cin >> ch; getchar();
        inOrder += ch;
    }
    BiTree head; //创建头指针,指向二叉树的根结点
    creatBiTree(head, postOrder, inOrder); //根据后序遍历序列和中序遍历序列建立二叉树
    FloorPrint(head);
    return 0;
}

问题
求上述代码问题所在和本题详细解答,重点是问题所在,万分感谢!

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-01-27 22:15
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月3日
  • 已采纳回答 2月3日
  • 创建了问题 1月27日

悬赏问题

  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 51单片机中C语言怎么做到下面类似的功能的函数(相关搜索:c语言)
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端
  • ¥15 基于PLC的三轴机械手程序
  • ¥15 多址通信方式的抗噪声性能和系统容量对比
  • ¥15 winform的chart曲线生成时有凸起