你们可以帮我解决一些我困在功课的问题吗?在二叉树中找到“局部最小值”
完整二叉树中的局部最小值被定义为小于其所有邻居(邻居=父亲,左孩子,右孩子)的节点。 我需要在给定的完整二叉树中找到一个局部最小值,它的每个节点在O(logn)complixity时间中有一个不同的数字。那么,由于需求是O(logn),我试图想出一种方法,只能通过树中的一条路径到达一片叶子。 或者,也许我可以每次只看到一半的树在递归中,这样它就会执行logn。
所以说,我有这样的树:
70
/\
77 60
有3种情况:
1)根比左和右子都较小//然后我做
2)的根是仅比左
3)的根是仅比右 小而变小
上面的树是案例2. 所以让我们“扔掉”左边的子树,因为77没有办法成为“局部最小”,因为它大于它的父亲。 所以我们留下了正确的子树。依此类推,直到我们找到当地的最小值。
问题在于,当我们抛出左子树时,我们可能会错过下面的另一个局部最小值。这里有一个例子:
70
/ \
77 60
/ \ / \
1 8 9 14
/\/\/\ /\
3 4 5 6 2 7 15 13
因此,在这种情况下,唯一的局部最小值为“1”,但我们错过了它,因为在一开始我们决定通过根的右子树进行搜索。
2013-03-27
Alaa M.