Doubly Linked List позволяет идиоматический обход связанного списка, и я подумал, почему бы не использовать двоичное дерево? Традиционно двоичные деревья или деревья в целом являются однонаправленными, и это означает, что при большом дереве с достаточным количеством узлов время работы для поиска листового узла может быть дорогостоящим.Idiomatic Traversal Binary Tree (возможно, любое дерево)
Если после нахождения такого узла, чтобы найти следующее, я мог бы пересечь дерево назад к корню, не было бы это выгодно по сравнению с другим поиском глубины в каждом узле дерева? Я никогда не рассматривал это раньше, пока не осознаю, что брак двойного связного списка и двоичного дерева потенциально может принести пользу.
Например, если я использовал внутренний класс
class Tree<T> {
private class TwoWayNode {
var data : T
var left : TwoWayNode
var right : TwoWayNode
var previous : TwoWayNode
}
}
Использование слева и справа, как обычно, чтобы пройти через соответствующие поддерева из каждого узла и предыдущий будет держать указатель на родительском узел позволяет идиоматический обход , Будет ли такая работа хорошо работать и каковы некоторые из потенциальных проблем или подводных камней?