日尼禾尔_怪怪 2020-02-11 17:33 采纳率: 0%
浏览 371

剑指offer 重建二叉树:为什么整个函数可以通过,拆成两个就不过了(牛客网运行)

剑指offer 重建二叉树:为什么整个函数可以通过,拆成两个就不过了(牛客网运行)

剑指offer 重建二叉树题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
各位大佬帮忙看看啊,真的很苦恼

//可通过的代码如下:
class Solution {
    public:
    TreeNode* reConstructBinaryTree(vector<int> pre, vector<int> vin) {
        if ((pre.empty()) || (vin.empty()))
        {
            return nullptr;
        }
        if (pre.size() != vin.size())
        {
            return nullptr;
        }

        TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
        root->val = pre[0];
        root->left = NULL;
        root->right = NULL;

        if (pre.size() == 1)
        {
            if (pre[0] == vin[0])
            {
                return root;
            }
            else
            {
                return nullptr;
            }
        }

        int vingen;
        for (int i = 0;; i++)
        {
            if ((i >= vin.size()) && (vin[i] != pre[0]))
            {
                return nullptr;
            }
            if (vin[i] == pre[0])
            {
                vingen = i;
                break;
            }
        }
        vector<int> zuopre, youpre, zuovin, youvin;
        for (int i = 1; i <= vingen; i++)
        {
            zuopre.push_back(pre[i]);
        }
        for (int i = vingen + 1; i < pre.size(); i++)
        {
            youpre.push_back(pre[i]);
        }
        for (int i = 0; i < vingen; i++)
        {
            zuovin.push_back(vin[i]);
        }
        for (int i = vingen + 1; i < vin.size(); i++)
        {
            youvin.push_back(vin[i]);
        }

        root->left = reConstructBinaryTree(zuopre, zuovin);
        root->right = reConstructBinaryTree(youpre, youvin);

        return root;
    }
};





// 不能通过的代码如下:
//(本质上来说,我什么都没改啊)

class Solution {
  public:
      TreeNode* reConstructBinaryTree(vector<int> pre, vector<int> vin) {
          if ((pre.empty()) || (vin.empty()))
          {
              return nullptr;
          }
          if (pre.size() != vin.size())
          {
              return nullptr;
          }
          return digui(pre, vin);
      }

      TreeNode* digui(vector<int> pre, vector<int> vin) {
          TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
          root->val = pre[0];
          root->left = NULL;
          root->right = NULL;

          if (pre.size() == 1)
          {
              if (pre[0] == vin[0])
              {
                  return root;
              }
              else
              {
                  return nullptr;
              }
          }

          int vingen;
          for (int i = 0;; i++)
          {
              if ((i >= vin.size()) && (vin[i] != pre[0]))
              {
                  return nullptr;
              }
              if (vin[i] == pre[0])
              {
                  vingen = i;
                  break;
              }
          }
          vector<int> zuopre, youpre, zuovin, youvin;
          for (int i = 1; i <= vingen; i++)
          {
              zuopre.push_back(pre[i]);
          }
          for (int i = vingen + 1; i < pre.size(); i++)
          {
              youpre.push_back(pre[i]);
          }
          for (int i = 0; i < vingen; i++)
          {
              zuovin.push_back(vin[i]);
          }
          for (int i = vingen + 1; i < vin.size(); i++)
          {
              youvin.push_back(vin[i]);
          }

          root->left = digui(zuopre, zuovin);
          root->right = digui(youpre, youvin);

          return root;
      }
  };
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-20 21:11
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥30 BC260Y用MQTT向阿里云发布主题消息一直错误
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)