2012-05-04 7 views
0

Меня попросили написать рекурсивный метод, чтобы выяснить, есть ли какие-либо дети. Я получаю базовые случаи, но я немного смущен о том, как перейти к рекурсивному разделу, поскольку мне нужно будет исследовать как правое, так и левое поддерево и вернуть значение false, если один из них имеет единственное дочернее и истинное, если один из них имеет 0 детей или recur.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. В противном случае рекурсивно спросите у каждого нетождественного ребенка тот же вопрос и объедините ответы, используя логические «или».

Поскольку это выглядит как домашнее задание, я оставляю вам реализацию.

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

Ho, я люблю деревья вопросы:

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); 
    } 
} 
Смежные вопросы