2017-10-18 5 views
-2

안녕하세요 여러분, BST에 새 노드를 삽입하는 데 의심의 여지가 있습니다. addNode 모듈에서 BST에 요소를 삽입하려하지만 새 노드를 추가 할 때마다 에서 통과 한 동일한 루트 노드에 트리를 통과하지 않고 처음에 전달됩니다.이진 검색 트리 순회

이것은 내가 작성한 코드입니다.

#include<stdio.h> 
#include<stdlib.h> 
#include<cstdio> 
#include<iostream> 
using namespace std; 
struct node 
{ 
    int data; 
    struct node *left; 
    struct node *right; 
}; 
struct node* newNode(int data) 
{ 
    node* temp = (node*)malloc(sizeof(struct node)); 
    //struct temp = new node; 
    temp->data = data; 
    temp->left = NULL; 
    temp->right = NULL; 
    return(temp); 
}; 
int addNode(node *dest, node *root) 
{ 
    if(root == NULL) 
    { 
     cout<<"adding data to node for "<< dest->data<<endl; 
     root = dest; 
     cout<<"ROOT VALUE = root->data "<<root->data<<endl; 
     return 1; 
    } 
    if(dest->data > root->data) 
    { 
     cout<<"Traverse right for "<<dest->data<<endl; 
     addNode(dest, root->right); 
    } 
    else if(dest->data < root->data) 
    { 
     cout<<"Traverse left for "<<dest->data<<endl; 
     addNode(dest, root->left); 
    } 
} 
void printNodes(node *root) 
{ 
    if(root != NULL) 
    { 
     printNodes(root->left); 
     if(root->left != NULL && root->right != NULL) 
      std::cout<< root->data <<" "; 
     printNodes(root->right); 
    } 
} 
int main() 
{ 
    int i, j, k, flag; 
    int arr[6] = {4, 2,8, 1, 0, 10}; 
    node *start = newNode(arr[0]); 
    for(i = 1; i < 6; i++) 
    { 
     node *newOne = newNode(0); 
     newOne->data = arr[i]; 
     cout<<"NODE DATA - start->data "<<start->data; 
     if(addNode(newOne, start)) 
      std::cout<<"\nNode added"<<endl; 
    } 
    printNodes(start); 
    return 1; 
} 

나무 개념 개념과 포인터 개념이 상당히 새로워졌습니다. 어떤 도움을 주셔서 감사 드리며 감사드립니다. 당신이 아니라 여기

, 같은 루트에 항상으로 추가되기 때문에
+0

포인터에 대한 특별한 것은 없습니다. 포인터 매개 변수에 할당하는 것은'int' 매개 변수에 할당하는 것과 다르지 않습니다. – molbdnilo

답변

0

...하지만 때마다이 같은 루트 노드에 추가되는 새로운 노드를 추가하는 동안은

입니다

if(addNode(newOne, start)) 

start은 항상 같습니다. 당신은 새로운 루트를 반환하고 같이 호출 addNode 만들 수 있습니다 : 당신이 그것을 구현하기에

start = addNode(newOne,start); 

내가 그것을 떠날거야. 파라미터가 항상 C의 값에 의해 전달되는

참고 ++ (가 통과하여 참조하지 않는 한), 따라서 방법 root = dest; 내부 파라미터를 변경 main에서 start에 영향을 미치지 않는다.