我在研究预序遍历二叉树算法。但我遇到分割错误:11错误。代码如下所示。
我想知道为什么会发生这个错误。顺便说一句,我已经尝试过非递归算法preorder(),分割错误还会发生.
环境: macOS,clang-800.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;
}发布于 2019-03-22 06:46:49
您需要将节点的left和right成员变量初始化为空指针。
无论如何,如果使用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());
}https://stackoverflow.com/questions/55294203
复制相似问题