c++ - 递归函数c++的段错误

标签 c++ pointers recursion binary-tree

我正在研究预序遍历二叉树算法。但是我遇到了 Segmentation fault:11 错误。代码如下所示。

我想知道为什么会出现这个错误。顺便说一句,我试过非递归算法preorder(),还是会出现段错误。

环境: macOS,clang-800.0.38

struct Node{
    char val;
    Node* left;
    Node* right;
};

void preorder(Node *T){
    if(T!=NULL){
        cout << T->val;
        preorder(T->left);
        preorder(T->right);
    }
}

int main(){
    Node *T = (Node *)malloc(sizeof(Node));
    Node *p = T;
    p->val = 'A';
    p->left = (Node *)malloc(sizeof(Node));
    p->left->val = 'B';
    p->right = (Node *)malloc(sizeof(Node));
    p->right->val = 'C'; 
    preorder(T);
    return 0;
}

最佳答案

您需要将节点的leftright 成员变量初始化为空指针。


无论如何,如果您使用 C++,请使用 C++ 而不是 C 构造。这是您的代码的示例 C++14 版本:

#include <iostream>
#include <memory>

struct Node{
   Node(char a) : val(a) { };
   char val;
   std::unique_ptr<Node> left, right;
};

void preorder(Node* p) {
   if (p) {
      std::cout << p->val;
      preorder(p->left.get());
      preorder(p->right.get());
   }
}

int main() {
   auto root = std::make_unique<Node>('A');
   root->left = std::make_unique<Node>('B');
   root->right = std::make_unique<Node>('C');

   preorder(root.get());
}

关于c++ - 递归函数c++的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55294203/

相关文章:

c++ - C++总理代码没有给出正确的输出

c - 我用scanf获取输入,我用printf检查输入....然后我去用的时候输入不正确

c++ - 如何创建返回与函数具有相同签名的仿函数的函数?

c++ - 进入智能指针,如何处理代表所有权?

c - Printf 似乎弄乱了一个简单 C 程序的输出

python - 递归代码未按预期工作 - Python 3

javascript - google script (JS) - 最大递归深度

javascript - 通用树的递归循环

c++ - 另一个子模块错误的omnet访问方法-没有匹配函数调用 ‘check_and_cast(cModule*&)’

c++ - 如何比较两个C字符串指针?