我正在努力编写一个递归算法来从最大堆中提取最大(根)。堆被构造成一棵树。我知道我应该用根交换最后一个节点并递归地向下推它。但是互联网上没有伪代码或堆栈溢出来处理树。我见过的提取算法是基于数组的。
所以假设我找到了最合适的叶子。
您有什么可以建议的解决方案吗?
void find_last(heap_node* root,int level,int* last_level,bool isRight,heap_node** res){
if(root == NULL)
return;
if(isRight && !root->left && !root->right && level > *last_level){
*res = root;
*last_level = level;
return;
}
find_last(root->right,level+1,last_level,true,res);
find_last(root->left,level+1,last_level,false,res);
}
我做了一个这样的函数调用
heap_node* last = NULL;
int last_level = -1;
find_last(root,0,&last_level,false,&last);
那就是寻找最深右节点的代码。它不工作:D