이진 검색 트리 (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
을 가리키는 포인터이기 때문에이 방법은 올바르지 않습니다. 제 질문은,이 문제에 대한 공통 노드 구조를 정의하는 올바른 방법은 무엇입니까?
http://en.wikipedia.org/wiki/AVL_tree과에서가 http://piumarta.com/software/tree/ – alk
도움이 될 수 있습니다 시스템에서는'struct CommonNode'에 32 비트의 패딩이있을 것입니다. 당신은 그 구조에'balanceFactor'를 추가하고 자신을 모든 불안으로 구할 수 있습니다. 32 비트 시스템에서는 공통 노드가 BST에서 32 비트 이상을 필요 이상으로 사용한다는 의미입니다. 그것이 당신에게 중요한 문제인지 아닌지를 판단해야합니다. 그러나 단일 구조로가는 것이 더 간단 할 것입니다. 또한,'struct AVLTree'와'struct bsTree'는 모두'struct CommonNode'에 대한 포인터가 아니라'struct CommonNode'를 직접 보유하는 것이 더 좋을 것입니다 - 그것은 완전히 불필요한 간접적 인 수준입니다. –
@JonathanLeffler 조언을 주셔서 감사합니다. – Hegde