2013-04-21 119 views
1

levelOrder方法需要遞歸調用自身以執行級別遍歷。我在如何添加(this)到累加器時遇到了問題。這是我迄今爲止所擁有的。級別遍歷的遞歸方法

public class BinaryTreeNode<T> { 
    private BinaryTreeNode<T> left; 
    private BinaryTreeNode<T> right; 
    private T data; 

    public BinaryTreeNode() { 
     this(null, null, null); 
    } 

    public BinaryTreeNode(T theData) { 
     this(theData, null, null); 
    } 

    public BinaryTreeNode(T theData, BinaryTreeNode<T> leftChild, 
      BinaryTreeNode<T> rightChild) { 
     data = theData; 

     left = leftChild; 
     right = rightChild; 
    } 

    public void levelOrder(
      SortedMap<Integer, List<BinaryTreeNode<T>>> accumulator, int depth) { 

     accumulator.put(depth, this);// add (this) to accumulator 

     if (left != null) { 
      left.levelOrder(accumulator, depth);// if (left) is not null invoke 
               // this method for left 
     } 
     if (right != null) { 
      right.levelOrder(accumulator, depth);// do the same for (right) 
     } 

    } 
} 

回答

0

UAB CS 302?好吧,我是這麼做的:

您必須檢查累加器是否在(this)節點的當前深度處包含密鑰。

兩種可能性: a。)累加器不包含表示此節點深度的密鑰,因此您必須創建一個新的二叉樹節點列表並將其添加到累加器中。 b)累加器已經有一個代表這個節點深度的關鍵字,所以你必須檢索已經存在的二叉樹節點列表,並將這個特定節點添加到該列表中。另外,如果左右節點不爲空,那麼你想在(深度+ 1)處遞歸調用此方法,因爲它們在樹上比當前節點低。

+0

謝謝。這很好。 – Yahwe 2013-04-29 00:41:02