2016-12-23 4 views
0

Я пишу код для вычисления общего числа корневых путей листьев в двоичном дереве в C++.Когда я делаю утверждение root-> right-> right = newnode (7); комментарий, компилятор показывает ошибку времени выполнения. Может кто-нибудь объяснить, почему?

#include<stdio.h> 
#include<iostream> 
#include<stdlib.h> 
#include<queue> 
using namespace std; 
struct node 
{int data; 
struct node *left; 
struct node *right; 
}; 

struct node* newnode(int data) 
{struct node* node = (struct node*)malloc(sizeof(struct node)); 
node->data = data; 
node->left = NULL; 
node->right = NULL; 
return node; 
} 

int root_to_leaf_paths(struct node *root) 
{if(root->left == NULL && root->right == NULL) 
    return 1; 
else if(root == NULL) 
    return 0; 
else 
    return(root_to_leaf_paths(root->left)+root_to_leaf_paths(root->right)); 

} 

int main() 
{ 
struct node *root = newnode(1); 
root->left = newnode(2); 
root->right = newnode(3); 
root->left->left = newnode(4); 
root->left->right = newnode(5); 
root->right->left = newnode(6); 

Когда я добавляю, сделайте комментарий ниже, компилятор показывает ошибку времени выполнения.

**//root->right->right = newnode(7);** 

printf("%d",root_to_leaf_paths(root)); 
} 
+0

Какого компилятора вы используете? И это дает сообщение об ошибке? – chtz

+0

@chtz Я использую компилятор gcc +5.1. Он показывает сообщение об ошибке «Ошибка выполнения». –

+0

@pang Это C++. –

ответ

2

Порядка условий в обратном направлении:

if(root->left == NULL && root->right == NULL) 
    return 1; 
else if(root == NULL) 
    return 0; 
else 
    return(root_to_leaf_paths(root->left)+root_to_leaf_paths(root->right)); 

Вы должны сначала убедиться, что root не является нулевой, прежде чем вы можете получить доступ к root->left и т.д.