Algoritmus pro návrat délku nejkratší větev na binárního stromu

hlasů
0

Binární strom mohou být kódovány pomocí dvou funkcí L a R tak, že pro uzel N, l (n), čímž byla levé dítě n, r (n), čímž se získá správný dítě n.

Větev stromu je cesta z kořene do listu, délka větví na určitém listu je počet oblouků na cestě od kořene k tomuto listu.

Nechť MinBranch (l, r, x) je jednoduchý rekurzivní algoritmus pro přijetí binární strom kódovaného L a R. funkce spolu s na kořenový uzel x pro binárního stromu a vrací nejkratší větev binárního stromu.

Uveďte prosím pseudokód pro tento algoritmus.

Položena 03/08/2009 v 04:30
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
4

Podívejte se na obou větví. Zjistit délku nejkratší cestou v každé z nich. Přidat jeden na menší a považují ji za nejkratší větev.

Odpovězeno 03/08/2009 v 04:31
zdroj uživatelem

hlasů
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 )
}
Odpovězeno 03/08/2009 v 04:34
zdroj uživatelem

hlasů
5

Vidím, že jste obdrželi odpovědi na to, jak se dostat na délku nejkratšího větve, ale váš domácí úkol je vlastně vrátit větev sám, pravděpodobně jako seznam uzlů. Takže, tady je spustitelný pseudokód (tj Python) skutečně vrátit větev pomocí Noneznamenat 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
Odpovězeno 03/08/2009 v 04:48
zdroj uživatelem

hlasů
1

Můžete si také najít v O (2 R ), kde R je výsledek. Užitečné v případě, že strom je velmi nevyvážený nebo nekonečný. Je <= O (N).

Můžete to udělat s opakujícím-prohloubení DFS.

Odpovězeno 03/08/2009 v 13:51
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more