我有以下二叉樹:二叉樹第一不全
[Node1]
[Node2] [Node3]
[Node4][Node5] [Node6][Node7]
[...] [...]
每個節點都有它的唯一ID和節點分開存儲的保持一個「父」參數。
我需要的是獲得不完整的第一個「父」(即該節點沒有2個子節點);與「第一'父'」我的意思是最接近根節點。
我已經嘗試了一些循環,但總是得到相同的結果只有一個邊......
更新:
這是無限的,我覺得不知道它是DFS
我有以下二叉樹:二叉樹第一不全
[Node1]
[Node2] [Node3]
[Node4][Node5] [Node6][Node7]
[...] [...]
每個節點都有它的唯一ID和節點分開存儲的保持一個「父」參數。
我需要的是獲得不完整的第一個「父」(即該節點沒有2個子節點);與「第一'父'」我的意思是最接近根節點。
我已經嘗試了一些循環,但總是得到相同的結果只有一個邊......
更新:
這是無限的,我覺得不知道它是DFS
要找到在滿足條件的樹中最淺的節點,您將需要使用breadth first search。
基本上,它看起來像這樣,作爲一個片段中,這應該是可執行的任何語言,保證是q實際上是一個FIFO隊列中的語言無關的方式
q = empty queue
q.push(root)
while q is not empty
current = q.pop
if current meets condition
return current
for each child of current
q.push(child)
。
我買了這兩種功能組合所期望的結果:
function traverseTree($id, $level=0) {
static $depths = array();
$depth++;
$c = get_comments(array('type' => 'member', 'parent' => $id));
if(count($c) < 2) {
$depths[$id] = $level;
}
if(isset($c[0]))
traverseTree($c[0]->comment_ID, $level+1);
if(isset($c[1]))
traverseTree($c[1]->comment_ID, $level+1);
return $depths;
}
function depthChoose($depths) {
return min(array_keys($depths, min($depths)));
}
所以depthChoose(traverseTree($id));
做的工作。注意:$ c [0]與node-> left相同,$ c [1]與node-> right相同;
不足 - 請定義節點如何排序......也許是DFS或BFS或倒置... –
@ DOUGLASO.MOEN我已更新問題 –
DepthFirstSearch將按順序搜索:1,2,4,5 ,3,6,7 _______ BreadthFirstSearch將按順序搜索:1,2,3,4,5,6,7。試試谷歌 –