【发布时间】:2017-11-08 14:02:24
【问题描述】:
我试图在它的前序和中序遍历上构建一个二叉树条件。
但是,当我运行下面的代码时,20% 的测试样本通过了,然后我得到“1351 分段错误(核心转储)”,preorder = inorder = {1,2}。
我的代码有什么问题?以及如何调试linux上的“segmentation fault”?
谢谢!!!
class Solution {
/**
*@param preorder : A list of integers that preorder traversal of a tree
*@param inorder : A list of integers that inorder traversal of a tree
*@return : Root of a tree
*/
public:
TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
// write your code here
TreeNode * root;
if (preorder.empty() || inorder.empty()) {
cout<<"in if"<<endl;
return NULL;
}
root->val = preorder.front();
vector<int> inorder_left(inorder.begin(), inorder.begin() + getIndex(inorder, preorder.front()));
vector<int> inorder_right(inorder.begin() + getIndex(inorder, preorder.front()) + 1, inorder.end());
vector<int> preorder_left(preorder.begin() + 1, preorder.begin() + 1 + inorder_left.size());
vector<int> preorder_right(preorder.begin() + 1 + inorder_left.size(), preorder.end());
root->left = buildTree(preorder_left, inorder_left);
root->right = buildTree(preorder_right, inorder_right);
return root;
}
private:
int getIndex(vector<int> & vec, int target) {
for (int i = 0; i < vec.size(); i++) {
if (vec[i] == target) {
return i;
}
}
}
};
【问题讨论】:
-
如果你有核心转储,你可以通过调试器运行它
-
我正在回想起我写 Java 的日子
-
1351 个分段错误对您没有帮助。只担心第一个。使用足够小的数据以便于调试。
-
@StoryTeller 为什么?我在任何地方都没有看到
.isEqual()。 -
@YSC -
class Solution与免费函数相反,它为我做了什么 :)
标签: c++ algorithm c++11 binary-tree