Algoritma bir ikili ağaçtaki en kısa dalın uzunluğunu döndürmek için

oy
0

Bir ikili ağaç iki işlev l ve bir düğüm n için, (n) n sol çocuk vermek o r böyle kullanılarak kodlanabilir, r (n) n sağ çocuk vermek.

Bir ağacın bir dalı, bir ağacın köküne bir yoldur, bir yaprağa bir şube uzunluğu o kökten yaprağa doğru yolda yay sayısıdır.

MinBranch (L, R, x) ikili ağaç kök düğümü x ile birlikte L ve R fonksiyonları tarafından kodlanan bir ikili ağaç alınması için basit bir dönüşümlü algoritma olabilir ve ikili ağacın en kısa kolu döner olsun.

Bu algoritma için pseudocode verin.

Oluştur 03/08/2009 saat 04:30
kaynak kullanıcı
Diğer dillerde...                            


4 cevaplar

oy
4

Her iki dalları bak. Her kısa yol uzunluğunu bulun. Daha küçük bir tane ekleyin ve en kısa şube olarak kabul etmekteyiz.

Cevap 03/08/2009 saat 04:31
kaynak kullanıcı

oy
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 )
}
Cevap 03/08/2009 saat 04:34
kaynak kullanıcı

oy
5

Ne almak için nasıl Alınan cevaplar ettik bkz uzunluğu en kısa şube, ancak ev ödevi dönmek aslında dalı tahminen düğümler listesi olarak, kendisi. Yani, burada çalıştırılabilir yalancı kod (yani Python) aslında kullanarak, şube dönmek var Nonenull adlı anlamında:

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
Cevap 03/08/2009 saat 04:48
kaynak kullanıcı

oy
1

Ayrıca O (2 içinde bulabilirsiniz R R sonucudur). Ağaç çok dengesiz veya sonsuz ise kullanışlıdır. Bu ise <= O (N).

Sen yinelemeli derinleşen DFS ile bunu yapabilirsiniz.

Cevap 03/08/2009 saat 13:51
kaynak kullanıcı

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