2015-07-09 46 views
-1

我有以下二叉樹:二叉樹第一不全

  [Node1] 
    [Node2]  [Node3] 
[Node4][Node5] [Node6][Node7] 
    [...]   [...] 

每個節點都有它的唯一ID和節點分開存儲的保持一個「父」參數。

我需要的是獲得不完整的第一個「父」(即該節點沒有2個子節點);與「第一'父'」我的意思是最接近根節點。

我已經嘗試了一些循環,但總是得到相同的結果只有一個邊......

更新:

這是無限的,我覺得不知道它是DFS

+0

不足 - 請定義節點如何排序......也許是DFS或BFS或倒置... –

+0

@ DOUGLASO.MOEN我已更新問題 –

+0

DepthFirstSearch將按順序搜索:1,2,4,5 ,3,6,7 _______ BreadthFirstSearch將按順序搜索:1,2,3,4,5,6,7。試試谷歌 –

回答

1

要找到在滿足條件的樹中最淺的節點,您將需要使用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) 

0

我買了這兩種功能組合所期望的結果:

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相同;