牛客网在线编程《剑指Offer》如何通过本地来调试

一、序言(废话)

在我准备找工作的时候, 虽然读的通信,但是还是想着往比较火的互联网转。然后呢,就到牛客网上去刷题。

牛客网在线编程《剑指Offer》如何通过本地来调试_第1张图片

无非就是这么几个在线编程专题 ,我主要针对的是【华为机试板块】,但是找工作嘛,那句俗话

剑指Offer一定要刷三遍以上

前辈们的金口玉言,怎么能不听?但是一点开进去傻眼了。【剑指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(vector pre, vector vin) {
        4.这里面写的就是牛客网OJ上需要的
        vector vinA, 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.将题目给出的例子直接写下来
    vector pre = {1,2,4,7,3,5,6,8};
    vector vin = {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;
}

 

你可能感兴趣的:(阿道的自学笔记)