2014-10-25 7 views
0

이진 검색 트리 (BST) 및 AVL 트리에 대한 공통 노드 구조를 정의하려고합니다. 이를 위해 CommonNode.h 파일에서 다음 구조를 정의했습니다.이진 검색 트리 및 AVL 트리의 공통 노드 구조

다른 파일 BST.h에서
struct CommonNode{ 
int data; 
struct CommonNode *left, *right; 
}; 
typedef struct CommonNode node; 

, I는 다른 파일 AVL.h에서 BST 노드

struct bsTree{ 
node *nodePtr; 
}; 
typedef struct bsTree bst; 

하는 구조를 정의한, I는 AVL 노드

struct AVLTree{ 
node *nodePtr; 
int balanceFactor; 
}; 
typedef struct AVLTree avl; 
하는 구조를 정의한

다음 코드를 고려하십시오 (트리에서 value을 검색하는 코드)

avl *p; 
p = root; // assume that pointer to root is given 
while(p!=NULL){ 
    if(value < p->nodePtr->data) // value 
     p = p->nodePtr->left; 
    else 
     p = p->nodePtr->right; 
} 

p->nodePtr->left;이 구조체 CommonNode을 가리키고 p이 구조체 AVLTree을 가리키는 포인터이기 때문에이 방법은 올바르지 않습니다. 제 질문은,이 문제에 대한 공통 노드 구조를 정의하는 올바른 방법은 무엇입니까?

+1

http://en.wikipedia.org/wiki/AVL_tree과에서가 http://piumarta.com/software/tree/ – alk

+1

도움이 될 수 있습니다 시스템에서는'struct CommonNode'에 32 비트의 패딩이있을 것입니다. 당신은 그 구조에'balanceFactor'를 추가하고 자신을 모든 불안으로 구할 수 있습니다. 32 비트 시스템에서는 공통 노드가 BST에서 32 비트 이상을 필요 이상으로 사용한다는 의미입니다. 그것이 당신에게 중요한 문제인지 아닌지를 판단해야합니다. 그러나 단일 구조로가는 것이 더 간단 할 것입니다. 또한,'struct AVLTree'와'struct bsTree'는 모두'struct CommonNode'에 대한 포인터가 아니라'struct CommonNode'를 직접 보유하는 것이 더 좋을 것입니다 - 그것은 완전히 불필요한 간접적 인 수준입니다. –

+0

@JonathanLeffler 조언을 주셔서 감사합니다. – Hegde

답변

0

이 64 비트에 당신

#include<stdio.h> 
#include<malloc.h> 

struct CommonNode{ 
int data; 
struct CommonNode *left, *right; 
}; 

typedef struct CommonNode node; 

struct bsTree{ 
node *nodePtr; 
}; 

typedef struct bsTree bst; 

struct AVLTree{ 
node *nodePtr; 
int balanceFactor; 
}; 

typedef struct AVLTree avl; 


int main() 
{ 
avl *p; 
p = (struct AVLTree*)malloc(sizeof(struct AVLTree)); 
p->nodePtr = (node*)malloc(sizeof(node)); 
p->nodePtr->data = 20; 
printf("The data value is %d\n",p->nodePtr->data); 
return 0; 
} 


OUTPUT: 
The data value is 20 
+0

문제는 데이터에 액세스하는 것이 아니라 포인터 유형을 사용하는 것입니다. 'p-> nodePtr-> left'가'node'를 가리키고 있지만,'struct AVLTree'를 가리 키길 원합니다. – Hegde

+0

@Hegde가 한 일은 정확합니다. 하나의 구조에 공통의 것을 넣은 다음 BST와 AVL에 모두 사용하고 있습니다. 당신에 따르면 그것은 중첩 구조와 같은 것입니다. p-> nodePtr-> 왼쪽은 AVL 만 가리키고 있습니다. 그것은 AVN 내에서 CommonNode 구조를 가지고있는 것과 같습니다. –