遞歸刪除二叉樹中以x為根的子樹
名稱:刪除二叉樹中以x為根的子樹
說明:此程序的大部分內(nèi)容,注釋都解釋的較為詳細(xì)了。在這里需要提及一點的是此處遞歸函數(shù)flag傳遞的不是上篇中講的引用,而是普通的變量,因為在向下傳遞參數(shù)(當(dāng)前結(jié)點是否是x的信息)的過程中只要傳遞給對應(yīng)的子樹,并不需要傳遞給整個樹的結(jié)點。在下一篇會做個關(guān)于遞歸傳遞參數(shù)的總結(jié)。
//遞歸刪除二叉樹中以x為根的子樹,(flag為標(biāo)志) int DelRoot_x(BiTree &T, int x,int flag) { if(T == NULL) return 0; else { if(T->data == x) //如果當(dāng)前節(jié)點的值為x,則更改標(biāo)志位,在下面將向遞歸子函數(shù)中傳遞flag值 { flag = 1; } int lef_ret = DelRoot_x(T->lchild,x,flag); //遞歸左子樹,lef_ret為從左子樹中返回的信息 int rig_ret = DelRoot_x(T->rchild,x,flag); //遞歸右子樹,rig_ret為從右子樹中返回的信息 if(1 == flag) //如果標(biāo)志為1,說明其祖父結(jié)點中有x,也就是說當(dāng)前結(jié)點需要刪除 { if(T->data == x) //如果是x結(jié)點,則需要向上層結(jié)點傳遞信息,以便其父節(jié)點將對應(yīng)的指針域賦空 return 1; delete T; } else { if(1 == lef_ret) //從子結(jié)點接受收的信息,即如果其子結(jié)點為x,需要將其指針域賦空 T->lchild = NULL; if(1 == rig_ret ) //從子結(jié)點接受收的信息,即如果其子結(jié)點為x,需要將其指針域賦空 T->rchild = NULL; } } return 0; }
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
相關(guān)文章
Qt股票組件之自選股列表拖拽、右鍵常用菜單功能的實現(xiàn)
這篇文章主要介紹了Qt股票組件之自選股列表拖拽、右鍵常用菜單功能的實現(xiàn)方法,本文通過實例文字相結(jié)合的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-07-07解決C語言中使用scanf連續(xù)輸入兩個字符類型的問題
這篇文章主要介紹了解決C語言中使用scanf連續(xù)輸入兩個字符類型的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12