我有以下二叉树:二叉树第一不全
[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。试试谷歌 –