二叉树第一个不完整
Binary Tree first incomplete
我有以下二叉树:
[Node1]
[Node2] [Node3]
[Node4][Node5] [Node6][Node7]
[...] [...]
每个节点都有其唯一的 ID,节点单独存储并持有一个 'parent' 参数。
我需要的是获取第一个 'parent' 不完整的(即没有 2 个子节点的节点); "first 'parent'" 我的意思是最接近根节点。
我尝试了一些循环,但总是只在一侧循环得到相同的结果...
更新:
这是无穷大,我想不确定是不是DFS
要找到树中满足条件的最浅节点,您需要使用 breadth first search。
它基本上看起来像这样,作为一个片段,以与语言无关的方式
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)
这应该可以用任何语言实现,确保 q 实际上是一个 FIFO 队列。
结合这两个函数我得到了想要的结果:
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相同;
我有以下二叉树:
[Node1]
[Node2] [Node3]
[Node4][Node5] [Node6][Node7]
[...] [...]
每个节点都有其唯一的 ID,节点单独存储并持有一个 'parent' 参数。
我需要的是获取第一个 'parent' 不完整的(即没有 2 个子节点的节点); "first 'parent'" 我的意思是最接近根节点。
我尝试了一些循环,但总是只在一侧循环得到相同的结果...
更新:
这是无穷大,我想不确定是不是DFS
要找到树中满足条件的最浅节点,您需要使用 breadth first search。
它基本上看起来像这样,作为一个片段,以与语言无关的方式
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)
这应该可以用任何语言实现,确保 q 实际上是一个 FIFO 队列。
结合这两个函数我得到了想要的结果:
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相同;