2016-01-17 31 views
0

我正在嘗試使用遞歸方法在二叉樹上編寫預定義遍歷算法。這裏是我有什麼:如何在Java中進行預訂遍歷?

void traverse(BT t) { 
     if (t == null){ 
      return; 
     } 

     System.out.print(t); 
     traverse(t.left); 
     traverse(t.right); 
     } 

由於某種原因,不編譯。我認爲問題出在我的其他代碼上。這裏是整個代碼:

class ZOrep extends TreeAndRepresentation { 
    private int k; 
    ZOrep left; 
    ZOrep right; 
    ZOrep(int m, int[] b) { // given sequence build tree 
    super(m, b); 
    N = (M-1)/2; 
    k = -1; 
    t = build(); 
    } 
    ZOrep(int n, BT t) { // given tree build sequence 
     super(n, t); 
     t = build(); 
     traverse(t); 
    } 
    BT build() { 
     return(a[++k] == 0 ? null : new BT(build(), build())); 
    } 

    void traverse(BT t) { 
    if (t == null){ 
     return; 
    } 

    System.out.print(t); 
    traverse(t.left); 
    traverse(t.right); 
    } 
} 

我覺得我失去了一些東西,當我構建樹(用我的ZOrep方法)。這裏的BT類:

class BT { 
    BT L; BT R; 
    BT(BT l, BT r) { L = l; R = r; } 
} 

目前我的編譯器說它找不到t.left和t.right的符號。

回答

1

目前我的編譯器說它找不到t.left和t.right的符號。

這是因爲tBT,它不具有leftright

我建議你決定你想調用你的樹節點類。是ZOrep還是BT,只能使用其中之一,否則會造成混淆。

System.out.print(t); 

如果你想打印出BT,您將需要一個toString()方法添加到它作爲默認不會告訴你任何用處。

2

當編譯器說它找不到符號時,這意味着您嘗試引用的字段不存在。

看着你的班級BT,這是正確的; BT沒有leftright,它有LR。因此,

traverse(t.L); 
traverse(t.R); 

更換

traverse(t.left); 
traverse(t.right); 

將解決這個問題。

0

你在通過什麼橫向功能?如果它是一個BT對象,那麼你不能左右使用,你必須使用L和R.左右是從BT延伸出來的對象的一部分,但它看起來像是在傳遞一個BT。