2012-05-04 75 views
0

我被要求寫一個遞歸方法來調查是否有任何單個子節點。我已經得到了基本案例,但對如何去做遞歸部分有點困惑,因爲我需要調查右側和左側子樹,如果其中一個子樹有一個子樹,則返回false,如果其中一個子樹有0名兒童或復發。java - 樹結構方法

我至今是:

public static boolean noSingleChildren(BinaryTreeNode t) { 
    if (rightC == null || leftC == null) { 
     return false; 
    } else if (rightC == null && leftC == null) { 
     return true; 
    } else { 
     return............ 
    } 
} 
+1

這將是容易得多,如果該方法是'singleChildrenExists()'而不是'noSingleChildren()'。 –

回答

2

的邏輯很簡單:

  1. 如果當前節點只有一個孩子,你就大功告成了。
  2. 否則,遞歸地詢問每個非null孩子相同的問題,並使用邏輯「或」組合答案。

由於這看起來像功課,我離開實施給你。

1
public static boolean noSingleChildren(BinaryTreeNode t) { 
    if (rightC == null || leftC == null) { 
     return false; 
    } else if (rightC == null && leftC == null) { 
     return true; 
    } else { 
     return noSingleChildren(t.getLeftBranch()) || noSingleChildren(t.getRightBranch()); 
    } 
} 
1

浩,我愛樹木的問題:

public static boolean hasSingleChildren(BinaryTreeNode t) { 
    if (t == null) { 
     return false; 
    } else if (t.rightC == null && t.leftC != null) { 
     return true; 
    } else if (t.rightC != null && t.leftC == null) { 
     return true; 
    } else { 
     return hasSingleChildren(t.rightC) || hasSingleChildren(t.leftC); 
    } 
}