我理解簡單的遞歸代碼,但有時會變得有點複雜。我迷路了,不能真正遵循代碼。 例如後續代碼(匿名寫的):我不完全理解這些遞歸調用何時返回
void reversetree(struct node* head)
{
//first check for the exception whether does it even exit or not
if(head==NULL)
return ;
reversetree(head->left); //reverse call for left child
reversetree(head->right); //same reverse call for right child
//now next these steps will swap the children
struct node* temp=head->left;
head->left=head->right;
head->right=head->left;
//now exit the function and you are done :)
}
6
/ \
3 4
/\ /\
1 2 8 9
比方說,如果二進制樹是這個樣子,有人可以做到一步步邏輯我好嗎?爲了我的理解,它首先檢查是否存在根,如果它存在,那麼它會再次調用左側子項的函數,直到沒有更多的左側子項爲止。所以當交換它的代碼被調用時呢?什麼時候開始用正確的孩子調用函數?對不起,我不太注意遞歸。
@ScottMcGready永遠不會變老:p – Sylwester
要理解遞歸,您不應該嘗試在大型示例上執行分步執行。相反,看看它對每個函數調用中的每個結構單元(節點)做了什麼,並嘗試*推斷*在每個單元上執行此操作時會發生什麼情況 - 以獲取任意大型結構的全貌。 – Bergi
哦,是的,你需要弄清楚基本情況是什麼,以便你可以從推理開始。在此之前,只要假設遞歸調用返回某些時候,做了一些事情。 – Bergi