在我准备找工作的时候, 虽然读的通信,但是还是想着往比较火的互联网转。然后呢,就到牛客网上去刷题。
无非就是这么几个在线编程专题 ,我主要针对的是【华为机试板块】,但是找工作嘛,那句俗话
前辈们的金口玉言,怎么能不听?但是一点开进去傻眼了。【剑指Offer】这一块,只给了一个Class,给好了接口,你往里填就好了。拜托,我想要本地调试,人嘛,总有点虚荣心,你让我在OJ上提交了去碰运气看写没写对,那个醒目的通过率低的吓人。我也要自尊心的,我也要虚荣心的。我错了,你就跟我说哪一行错了,不够的嘛。我需要更多的提示,我好去google的好吗。无论怎样,我水平不高,我就想要本地调试。
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* reConstructBinaryTree(vector pre,vector vin) {
//等待你的代码
}
};
这个反馈界面,不友好。可是我要自己自己本地调,怎么用?
#include "pch.h"
#include
#include
using namespace std;注:这上面是VS自动生成的,下面是把牛客网注释掉的结构体搬过来的
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
//TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Solution {
public:
TreeNode* reConstructBinaryTree(vectorpre, vector vin) {
4.这里面写的就是牛客网OJ上需要的
vectorvinA, vinB, preA, preB;
if (pre.empty() || vin.empty()) {
return NULL;
}
int root = pre[0], index;
TreeNode* res = new TreeNode;得到想要的preA、vinA、preB, vinB
res->val = root;
5.调用自身做递归
res->left = reConstructBinaryTree(preA, vinA);
res->right = reConstructBinaryTree(preB, vinB);
return res;
}
};
int main()
{
1.将题目给出的例子直接写下来
vectorpre = {1,2,4,7,3,5,6,8};
vectorvin = {4,7,2,1,5,3,8,6};
2.关键:创建这个Class,类是于先用“int i;”声明一个int型类型i,这里用class Solution声明一个Solu类
class Solution Solu;
3.调用类里面的函数(传入参数进去)
Solu.reConstructBinaryTree(pre,vin);
return 0;
}
1.牛客网上提交
class Solution {
public:
TreeNode* reConstructBinaryTree(vector pre, vector vin) {
vector vinA,vinB,preA,preB;
if (pre.empty() || vin.empty()) {
return NULL;
}
int root = pre[0],index;
struct TreeNode* res = new TreeNode(root);
for (int i = 0; i < vin.size(); i++) {
if (vin[i] != root) {
vinA.push_back(vin[i]);
}
else {
index = i;
break;
}
}
for (int i = index + 1; i < vin.size(); i++) {
vinB.push_back(vin[i]);
}
int lenPre = vinA.size();
for (int i = 1; i < 1 + lenPre; i++) {
preA.push_back(pre[i]);
}
for (int i = 1 + lenPre; i < pre.size(); i++) {
preB.push_back(pre[i]);
}
res->val = root;
res->left = reConstructBinaryTree(preA,vinA);
res->right= reConstructBinaryTree(preB, vinB);
return res;
}
};
2.本地调试完整的,需要注意的是本地调试用的,OJ上不一定能用,有需要的改一下就好
// Temp.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include "pch.h"
#include
#include
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
//TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Solution {
public:
TreeNode* reConstructBinaryTree(vector pre, vector vin) {
vector vinA, vinB, preA, preB;
if (pre.empty() || vin.empty()) {
return NULL;
}
int root = pre[0], index;
TreeNode* res = new TreeNode;
for (int i = 0; i < vin.size(); i++) {
if (vin[i] != root) {
vinA.push_back(vin[i]);
}
else {
index = i;
break;
}
}
for (int i = index + 1; i < vin.size(); i++) {
vinB.push_back(vin[i]);
}
int lenPre = vinA.size();
for (int i = 1; i < 1 + lenPre; i++) {
preA.push_back(pre[i]);
}
for (int i = 1 + lenPre; i < pre.size(); i++) {
preB.push_back(pre[i]);
}
res->val = root;
res->left = reConstructBinaryTree(preA, vinA);
res->right = reConstructBinaryTree(preB, vinB);
return res;
}
};;
int main()
{
vector pre = {1,2,4,7,3,5,6,8};
vector vin = {4,7,2,1,5,3,8,6};
class Solution Solu;
Solu.reConstructBinaryTree(pre,vin);
return 0;
}