我的构建二叉树解决方案有啥问题?
Posted
技术标签:
【中文标题】我的构建二叉树解决方案有啥问题?【英文标题】:What's wrong with my build binary tree solution?我的构建二叉树解决方案有什么问题? 【发布时间】: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
与免费函数相反,它为我做了什么 :)
【参考方案1】:
当您访问其成员val
、left
和right
时,指针root
未初始化。例如用new TreeNode()
初始化它。
【讨论】:
比我快 2 秒 :D【参考方案2】:root
实际上并未初始化为值。
你声明它:
TreeNode *root;
...但是你需要初始化它,像这样:
root = new TreeNode;
【讨论】:
以上是关于我的构建二叉树解决方案有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章