答案 0 :(得分:0)
您可以执行inorder
,postorder
或preorder
遍历中的任何一项并计算每个节点的高度。但是对于这个问题而不仅仅是计算我们在数据结构中插入的节点与adjacency list
非常相似,现在唯一的区别是linked list
position 0
存储height = 0
的所有节点},linked list
position 1
存储height = 1
的所有节点,依此类推。
要获得输出,我们只需从第一个linked list
开始打印每个链表的元素。
遵循简单的伪代码完成工作:
void inorderTraversal(NodePointer ptr)
{
if(ptr == NULL)
return;
else
{
inorderTraversal(ptr->left);
if(ptr->left == NULL and ptr->right == NULL)
{
ptr->height = 0;
adjacencyList[ptr->height].append(ptr->value);
}
else
{
if(ptr->left != NULL and ptr->right == NULL)
{
ptr->height = ptr->left->height + 1;
adjacencyList[ptr->height].append(ptr->value);
}
if(ptr->right != NULL and ptr->left == NULL)
{
ptr->height = ptr->right->height + 1;
adjacencyList[ptr->height].append(ptr->value);
}
if(ptr->right != NULL and ptr->left != NULL)
{
h1 = ptr->left->height;
h2 = ptr->right->height;
ptr->height = max(h1,h2)
adjacencyList[ptr->height].append(ptr->value);
}
}
inorderTraversal(ptr->right);
}
}
现在我们可以从第一个linked lists
开始遍历所有linked list
,并按照高度的升序获取节点。