Я хочу определить общую структуру узлов для дерева двоичного поиска (BST) и дерева AVL. Для этого я определил следующую структуру в файле CommonNode.h.Общая структура узла для дерева двоичного поиска и дерева AVL
struct CommonNode{
int data;
struct CommonNode *left, *right;
};
typedef struct CommonNode node;
в другом файле BST.h, я определил структуру для BST узла
struct bsTree{
node *nodePtr;
};
typedef struct bsTree bst;
В другом файле AVL.h, я определил структуру для 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
На 64-битной системы, в 'struct CommonNode' будет 32 бита заполнения. Вы могли бы также добавить «balanceFactor» в эту структуру и сэкономить все тошноту. В 32-битной системе это означало бы, что общие узлы используют 32-бит больше в BST, чем это минимально необходимо. Вам придется судить, для вас это проблема, но переход с одной структурой будет проще. Кроме того, как 'struct AVLTree', так и' struct bsTree' будут лучше удерживать 'struct CommonNode' напрямую, а не указатель на' struct CommonNode' - это совершенно ненужный уровень косвенности. –
@JonathanLeffler Спасибо за совет, что имеет смысл – Hegde