我有這樣刪除/摺疊二叉樹PHP
----------------------------------
CUSTOMER_ID | REF_CUSTOMER_ID |
----------------------------------
1 | NULL |
2 | 1 |
3 | 2 |
4 | 2 |
5 | 3 |
6 | 3 |
7 | 4 |
8 | 4 |
9 | 1 |
----------------------------------
從該表中已知的表2是1和3,4孩子的2等孩子.. 這使得樹看起來像這樣
1
|
------------------
| |
2 9
| |
-----------
| |
3 4
| |
----- -----
| | | |
5 6 7 8
沒關係,每個父後有2個孩子和4葉,在這種情況下2有3個和4葉5,6,7,8樹將要崩潰的孩子。這意味着它只會在樹中留下1。但是因爲2是1的孩子,3,4是1和1的葉子還沒有完成它的週期,所以1無法崩潰。
問題
如何我還是崩潰的2棵樹的根,但保持一個與它的孩子和葉子的樹?我如何解決這個問題?我必須創建另一個表嗎?或者只是使用現有的表?
僞代碼:
function deleteChildBranches(node)
{
get left and right child nodes
if(there's left branch node)
deleteANode(left branch node)
if(there's right branch node)
deleteANode(right branch node)
}
function deleteANode(node)
{
get left and right child nodes
if(there's left branch node)
deleteANode(left branch node)
if(there's right branch node)
deleteANode(right branch node)
delete this node
}
該代碼將首先遍歷樹的底部,節點被刪除
你能解釋一下'collapse'是什麼意思嗎?我不明白你的問題......也許你可以張貼你想要樹最終看起來像什麼的圖表。 – SharkofMirkwood
另外,3和4不是葉子。葉節點是沒有孩子的節點,但在本例中,3和4都有兩個孩子。 – SharkofMirkwood
摺疊 - 意思是我想刪除其所有節點的樹。但在這種情況下,IF 2是一個根,整棵樹與2作爲ROOT必須崩潰。但是1作爲根還沒有完成一個循環,所以1不能崩潰。上圖中我知道3和4不是葉子。但是如果1是root並且你忽略了5678,那麼3和4是1的樹葉。循環只完成到樹的2級。這意味着你必須分別在2和1之間。但是在大樹結構中,兩者都是相互關聯的。 – Ridwan