2015-11-25 6 views
3

Я изучаю деревья на Java и наткнулся на некоторые запутанные строки в книге, которую изучаю. Диаграмма дана для обхода упорядоченную это:Уточнение по обходному пути в двоичном дереве поиска

enter image description here

код для обхода (рекурсивный) является:

private void inOrder(Node leftRoot) { 
    if (localRoot != null) { 
     inOrder(localRoot.leftChild); 
     System.out.println(localRoot.iData + " "); 
     inOrder(localRoot.rightChild); 
    } 
} 

Линии Я смущен являются:

Теперь мы вернулись к inOrder (A), просто вернувшись из прохода слева от левого ребенка. Мы посещаем A, а затем снова вызываем inOrder() с C как аргумент, , создавая inOrder (C). Как inOrder (B), inOrder (C) не имеет детей, поэтому шаг 1 возвращается без каких-либо действий, шаг 2 посещает C, а шаг 3 возвращает без каких-либо действий. inOrder (B) теперь возвращается к inOrder (A).

Однако inOrder (A) теперь выполнен, и он возвращается, и весь обход завершен. Порядок, в котором были посещены узлы, - A, B, C; они были посещены inorder. В двоичном дереве поиска это будет порядок восходящих клавиш.

Я выделил детали, на которых я застрял. Во-первых, я думаю, что на третьем этапе inOrder (C) [а не inOrder (B)] возвращается к inOrder (A). А во-вторых, порядок, в котором были посещены узлы, должен быть B -> A -> C.

Пожалуйста, помогите мне!

+0

С System.out.println (localRoot.iData + ""); во второй строке, этот отпечаток (или посещение) должен быть B-> A-> C. Но реальный порядок доступа A-> B-> C. –

+0

Вы верны в обеих претензиях. – Shloim

+0

Какая книга? – Shloim

ответ

0

Да, вы правы по обоим пунктам. Кажется, это опечатки, или errata.

В качестве опоры я узнал стиль диаграммы в вашем посте, потому что я изучил структуры данных много лет назад из той же книги (Lafore). К сожалению, не похоже, что у него есть список ошибок, опубликованных в любом месте, что вызывает разочарование, поскольку большинство авторов этого добиваются.

+0

Вторая претензия не является ошибкой. Как пояснил @RogerDwan, книга ссылается на ** порядок посещения **, который является A, B, C, а не ** порядком вывода **, который является B, A, C. – Fildor

+0

Он ясно заявляет, что «они были посещены inorder. В двоичном дереве поиска это будет порядок восходящих клавиш». так или он ошибается, или он определил «порядок посещения» двумя разными способами в том же предложении. – Shloim

+0

@Shloim Вы правы, это * немного запутанно ... – Fildor

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