2015-07-09 48 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相同;