可以使用两个函数l和r对二叉树进行编码,使得对于节点n,l(n)给出n的左子节点,r(n)给出n的右子节点。
树的一个分支是从根到叶子的路径,分支到特定叶子的长度是从根到叶子的路径上的弧数。
让MinBranch(l,r,x)成为一个简单的递归算法,用于将l和r函数编码的二叉树与二进制树的根节点x一起,并返回二叉树的最短分支。 / p>
请提供此算法的伪代码。
答案 0 :(得分:5)
我看到你已经收到了关于如何获得最短分支的长度的答案,但你的家庭作业实际上是要返回分支本身,大概是作为一个节点列表。所以,这里是可执行的伪代码(即Python)实际返回分支,使用None
表示null:
def MinBranch(l, r, x):
if x is None: return []
left_one = MinBranch(l, r, l(x))
right_one = MinBranch(l, r, r(x))
if len(left_one) < len(right_one):
tail = left_one
else:
tail = right_one
return [x] + tail
答案 1 :(得分:4)
看看两个分支。找出每条路径中最短路径的长度。添加一个到较小的并认为它是最短的分支。
答案 2 :(得分:1)
您也可以在O(2 R )中找到它,其中R是结果。如果树非常不平衡或无限,则很有用。它是&lt; = O(N)。
你可以通过迭代加深DFS来做到这一点。
答案 3 :(得分:0)
function recurseMin(n)
{
if r(n) is null and l(n) is null, return 1
if r(n) is not null, rightSum = recurseMin( r(n-1) )
if l(n) is not null, leftSum = recurseMin ( l(n-1) )
return 1 + min( leftSum, rightSum )
}