我今晚在接受采访时被要求做这个问题:
为此算法中的任意三个输入构建决策树:
For i = 1 to n - 1 do
If L[i] > L[i+1]
swap(L[i],L[i+1])
For i = n-1 downto 2 do
If L[i] < L[i-1]
swap(L[i],L[i-1])
我相信我的解决方案不正确,因为我出了16片叶子。我做了以下事情:
Root :
{a, b, c}
/ \
(i>i+1) / \ (i<i+1)
/ \
{b,a,c} {a,b,c}
/ \ / \
/ \ / \
/ \ / \
{b,c,a} {b,a,c} {a,c,b} {a,b,c}
这完成了第一个循环,然后我以相同的方式将输入扩展到第二个循环,在每个节点处假设一个决定去了&lt;一个人去了>,每次从每个节点得到两个答案,最终给你16个叶子。
这是对的吗?如果没有,应该怎么做?
答案 0 :(得分:1)
对于n = 3
,第二个循环仅运行一次i = 2
。因此,每个节点有两个答案,你得到2 * 4 = 8个叶子。