2010-10-28 4 views
2

У меня есть рабочий фрагмент, который можно использовать для обычного дерева, содержащего узлы. Теперь мне просто нужно возиться с ним, чтобы работать на 2-3-4 дерева, что должно быть проще, поскольку каждый путь имеет одинаковое расстояние, так как он сбалансирован, правильно?Высота 2-3-4 дерева

Методы, которые я имею в своем распоряжении, включают getNextChild(), split() и, конечно, insert().

public int height() { 
    return (height(root)); 
} 

private int height(TNode localRoot) { 
    if(localRoot == null) { 
     return 0; 
    } 
    else { 
     //Find each sides depth 
     int lDepth = height(localRoot.leftChild); 
     int rDepth = height(localRoot.rightChild); 

     //Use the larger of the two 
     return (Math.max(lDepth, rDepth) + 1); 
    } 
} 
+0

Могли бы просто избавиться от левой и правой глубины и использовать одну линию, получающую следующего ребенка? –

+0

@John Я думаю, что ломает концепцию дерева – Woot4Moo

+0

Правда, но относительно того, как найти и вернуть высоту, не имеет значения, какой путь я беру? Если все они вернутся так же? –

ответ

1
public int height() 
{ 
    TNode cur = root; 
    int depth = -1; 

    while (cur != null) 
    { 
     cur = cur.getChild(0); 
     depth++; 
    } 

    return depth; 
} 
+0

должен добавить проверку, чтобы убедиться, что корень не равен нулю. – Woot4Moo

+0

@ Woot4Moo: Хороший улов, обновленный для повторения по-разному (и верните высоту -1, когда дерево пустое). – poke

+0

это должно быть: 'return ++ depth;' поэтому вы не возвращаете '0', если это глубина' 1' – Woot4Moo

0

Если сбалансирован, вы просто должны быть в состоянии рекурсию вниз на одну сторону дерева, чтобы определить высоту.

Смежные вопросы