我需要從左側或右側子樹中的所有二叉樹中獲得某個級別的所有節點。我目前檢索數據庫二叉樹作爲數組,例如: [1,2,3,4,5,6,7]
表示像這樣的樹:以完全二叉樹的形式獲取所有節點,陣列格式
1
/\
/ \
2 3
/\ /\
/ \/ \
4 5 6 7
所以我需要做的基本上是搶樹的級別並回到它作爲一個陣列。類似level(3,"left") -> [4,5]
或level(2, "right") -> [3]
。我正在考慮以遞歸方式創建一個BinaryTree對象,但我無法想出一種方法來跟蹤調用中的級別,而無需使用級別標記每個節點或類似的東西,因爲我想保留數據庫儘可能乾淨。有任何想法嗎?
編輯:我真的需要左或右子樹中的所有節點,而不是整棵樹。我正在展示一個比賽,所以我需要將它分成一半和一半。如果我沒有分裂的話,我也許可以這樣做:
function level($array, $level_num) {
return array_slice($array, pow(2, $level_num)-1, pow(2, $level_num));
}
我真的不知道如何擴展這樣來僅左或右子樹的水平陣列。
這是一個非常酷的問題。試試看,並顯示您的失敗代碼。另請注意,您呈現的圖像與示例數組不匹配。該數組有4和沒有8.該圖像沒有4,但有一個8. – BeetleJuice
@BeetleJuice對不起,沒有注意到。只是更新了它。 – ashraj98
好吧,我寫了一個解決方案。在你的OP中,'level(3)'仍然包含'8',即使它不在樹中。 – BeetleJuice