双方向循環リンクリストへのバイナリ検索ツリーの現場でソート。子どもたちは、前駆体と後継ポインタ方法循環リンクリストとしてポインタを残すことができます。
一例として、次の二分探索木で、あなたの問題のより良い理解を与えるために:
私たちは、双方向循環リストに、この二分探索木ことを願っています。各ノードは、前任者と後継者ポインタのリストを持っています。双方向循環リストのために、最初のノードの前身は、最後のノードが第1ノードの後継であり、最後のノードです。
次の図に示すには、上記のバイナリ検索ツリーは、リンクされたリストに変換されます。「ヘッド」ポイントは、最小の要素を持つノードのリストを表します。
特に、我々はその場で変換を完了したいと考えています。変換が完了すると、ツリーのニーズの先行ノードへの左ポインタポイントは、ツリー内の右側のノードは、その後にポイントする必要があります。私たちは、リスト内の最初のノードへのポインタを返すことがあります。
次の図に示す変換後のバイナリ検索ツリーは、実線は、後継者、破線で示す先行関係との関係を示しています。
解決策1:
パブリック 静的の クラスノード{ プライベート int型のval; プライベートノードが左; プライベートノードを右。 パブリックノード(INT ヴァル){ この .val = ヴァル。 } } パブリックノードtreeToDoublyList(ノードルート){ 場合(ルート== NULL ){ 戻り ヌル。 } ヘルパー(ルート)。 last.right = 最初; first.left = 最後。 返す最初; } 公共 のボイドヘルパー(ノードノード){ 場合(ノード!= nullの){ ヘルパー(node.left)。 もし(最後!= nullの){ last.right = ノード。 node.left = 最後。 } 他{ 最初 = ノード。 } 最後に = ノード。 ヘルパー(node.right)。 } } 民間最初のノード。 プライベートノードの最後。
出典:滞在ボタン(LeetCode)
リンクします。https://leetcode-cn.com/problems/convert-binary-search-tree-to-sorted-doubly-linked-list