【问题标题】: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 与免费函数相反,它为我做了什么 :)

标签: c++ algorithm c++11 binary-tree


【解决方案1】:

当您访问其成员valleftright 时,指针root 未初始化。例如用new TreeNode() 初始化它。

【讨论】:

  • 比我快 2 秒 :D
【解决方案2】:

root 实际上并未初始化为值。

声明它:

TreeNode *root;

...但是你需要初始化它,像这样:

root = new TreeNode;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 2016-02-21
    相关资源
    最近更新 更多