2017-10-12 5 views
-1

왼쪽 또는 오른쪽에있는 이진 트리에 값을 저장하는 방법을 아는 사람이 있습니까? 예를 들어 우리는이 구조체가 :함수를 사용하여 구조체에 액세스하는 방법, 값을 저장하는 방법?

struct A 
{ 
    int a; 
    struct A *left; 
    struct A *right; 
} 

struct B 
{ 
    A *root; 
} 

을 우리는 기능을 가지고 :

void insert(B *tree, int value) 
{ 
    if(tree== NULL) 
    { 
     tree= (B*) malloc (sizeof(B)); 
    } 
    else if(tree!=NULL) 
    { 
     tree->root->a = value; 
     tree->root->left = NULL; 
     tree->root->right = NULL; 
    } 

지금 우리가 루트 ... 하지만 어떻게 오른쪽 왼쪽에있는 값을 initiliase하는?

else if(tree->apointer->a< value) 
{ 
    tree->root->left = value // with & wont work cause is a pointer to integer 
} 

누구든지 알고 있나요 ?? tree= (B*) malloc (sizeof(B));와 사전

+1

문 경우로 묶을 수 있습니다, 여러분의 코딩 스타일은 절대적으로 비난 받아 마땅하다. – Bathsheba

+0

선생님 께 문의하십시오. Q & A 사이트가 아닌 교육 환경에서 해결해야 할 몇 가지 핵심 개념에 근본적인 문제가 있습니다. – Arkadiy

답변

0

에서

감사합니다, 당신은 유형 B의 객체를 생성,하지만 당신은 tree->root가 가리킬 수있는 유형 A의 객체를 생성하지 않습니다. tree->root->a 또는 root의 다른 멤버에 액세스하는 것은 정의되지 않은 동작입니다.

당신은 쓸 수 :

tree = malloc (sizeof(B)); 
tree->root = malloc(sizeof(A)); 
+0

그리고 왼쪽에 어떻게 액세스합니까? 이 시도 할 때 경고가 있습니다 : tree-> root-> left = value 어떻게이 문제를 해결할 수 있습니까? – Newuser1234567

+0

'root-> left'와'root-> right' 둘 다'A' 타입의 객체를 가리켜 야합니다; 이러한 객체는 일반적으로 새 노드에서 정렬 할 때 존재합니다. 그러나 부정적으로 생각하지 마십시오.이 예가 성숙도 수준을 약간 넘을 수 있습니까? 이진 탐색 트리는 C를 배우기 시작할 때 적절한 요소가 아닙니다 ... –

0

나는 코드를 논의하는 것은 의미가 없다고 생각 :) 심지어 구조 정의는 세미콜론없이 기록됩니다.. 이러한 구조 정의

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

struct B 
{ 
    struct A *root; 
}; 

main에 트리

int main(void) 
{ 
    struct B tree = { NULL }; 
    //... 

다음 선언되면 함수 insert는 다음과 같은 방법

를 정의 할 수 있다는 것을 가정 고려하여

int insert(struct B *tree, int value) 
{ 
    struct A **node = &tree->root; 

    while (*node) 
    { 
     if (value < (*node)->value) 
     { 
      node = &(*node)->left; 
     } 
     else 
     { 
      node = &(*node)->right; 
     } 
    } 

    *node = malloc(sizeof(struct A)); 
    int success = *node != NULL; 

    if (success) 
    { 
     (*node)->value = value; 
     (*node)->left = NULL; 
     (*node)->right = NULL; 
    } 

    return success; 
} 

푸 nction이

insert(&tree, value); 

또는 전화처럼 호출 할 수 있습니다 당신이 기차에 서 서 스마트 폰 VI를 사용하지 않는

if (insert(&tree, value)) { /*...*/ } 
관련 문제