2014-12-12 7 views
-1

안녕 얘들 아 주어진 노드를 내 BT 루트에 삽입하는 함수를 작성해야합니다. 노드를 삽입 한 후 트리는 BST의 표준으로 남아 있어야합니다. 내 기능은 무효 값은 재귀 정의되어야한다 무시하지 "라는 오류를 반환 나에게 무슨 잘못 힌트를주세요이진 트리 void 함수

void InsertNode(Node* root, Node* node){ 
    if(root == NULL) { 
      root = node; 
    } 

    else if(node->value <= root->value){ 
     root->left = InsertNode(root->left,node); 
    } 

    else{ 
     root->right = InsertNode(root->right,node); 
    } 
    return ; 
} 

그래서이 구조의 주어진 노드를 할당하는 방법을.. : 빈 트리 루트에

struct Node{ 
int value; 
Node* left; 
Node* right; 
}; 

?

void InsertNode(Node* root, Node* node){ 
if (node->value==root->value) return; 

if(node->value < root->value){ 
     root->left = node; 
     node->left++; 
     } 
if (node->value>root->value){ 
     root->right = node; 
     node->right++; 

} 
} 

그래서 지금은 내 기능의이 아이디어는 바로 통과하는 두 포인터를 증가하는 것입니다해야 나무?

+2

'root-> right = InsertNode (...)'메소드의 서명과 일치하지 않습니다. 실제로 반환 유형은 무엇입니까? – Caramiriel

답변

1

변수에 void을 할당하려고합니다. 이것은 컴파일러에게는 이해가되지 않습니다.

어쨌든 BTW 기능이 작동하지 않습니다. noderoot에 할당하면 InsertNode 기능의 본문을 초과하여 지속되는 작업은 수행되지 않습니다.

+0

그래서 당신은 내가 변수를 할당 할 수 없다고 말합니다 -> void 형의 재귀 함수를 남겼습니까? 그러나 재귀 적 정의없이 어떻게 트리를 통과 할 수 있습니까? – Franklinprogs

+0

글쎄, 재귀 정말 아무 상관이있다, 그것은 당신이 결정 반환 값 (또는 부족). 어떻게해야 다른 일을 할 수 있겠는가? 물론 재귀를 반복 할 수 있으므로 반복 할 수있다. 문제의 주요 부분은'void '는 값이 아니라는 것입니다. 할당 표현식에 나타나지 않는 것은 의미가 없습니다. 그래서 무효가 아닌 다른 것을 돌려 주겠습니까? –