二分探索木と二重リンクリスト:オファー(26)を受賞
検索マイクロチャネル公共番号:「AI-ming3526」以上のアルゴリズム、機械学習のための「この小さなコンピュータビジョン」、ドライ
CSDN:https://blog.csdn.net/baidu_31657889/
GitHubの:https://github.com/あいみ-CN / AILearners
まず、プライマー
このシリーズは、独自のアルゴリズムの下で能力を強化することを目指して、オンラインの質問ノートの牛をはねのける「安全オファーを証明するために、」私のブラシです。
:解決オファーCSDNとgithubのリンクをクリックして、安全性の問題を証明するために、完全なアルゴリズムを見る
安全オファーを証明する完全な分析演習CSDNアドレス
githubのアドレス
第二に、タイトル
二分探索木、ソートされた二重にリンクされたリストに変換し、バイナリ検索ツリーを入力します。要件は、ツリーのノードポインタを調整するために、ポイントを任意の新しいノードを作成することはできません。
1、アイデア
最初の例を与えます:
バイナリ検索ツリー上に示したように、我々は二重にリンクされたリストでそれを変換する必要があります。
二分探索木の特徴によれば、値<ルートノード<左ノードとノードの正しい値は、我々は、データがソートされたバイナリツリートラバーサルシーケンスの序数を使用して、見つけます。だから、まず、二分探索木をトラバースする方法を決定します。
10個のノードの値が、左のサブツリーのルートノード6、右のサブツリーのルートノード14:ルートへの先行順走査の中で、私たちは、二分探索木とパート3を置きます。ソートされたリンクリスト、定義されているノードの接続点10とその左側の部分木の最大値は、ノード8に連結され、それが最小になり、ノード12の右部分木でありますリンクされたノード。図は次のとおりです。
注:ルート、左サブツリー、右のサブツリー。左と右のサブツリーをソート二重にリンクされたリストに変換してルートをリンクされた後、二分探索木の全体の作品は、変換二重リンクリストの並べ替えとなります
私たちは、ルートノードへの変換を通過する際に、再帰的トラバーサル順序に従って、その左のサブツリーがソートされたリストに変換されており、この時点でリストの値は、ツリーの左の子ノードは、尾の最大値であり、 (8)。私たちは、私たちが知っている、それは(8)と根(10)リンクされている場合、ルートノード(10)は、リストの末尾になり参照し、右部分木を横断することの後にルートノード(10)を通過するために、この場合、接合、ノード(12)の右の部分木の最小値は、それがルートにリンクされます。左と右のサブツリー再帰が問題を解決することができることをそのような方法。
2、プログラミング
パイソン
コードの実装:
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def Convert(self, pRootOfTree):
# write code here
if not pRootOfTree: return
self.arr = []
self.midTraversal(pRootOfTree)
for i,v in enumerate(self.arr[:-1]):
v.right = self.arr[i + 1]
self.arr[i + 1].left = v
return self.arr[0]
##中序遍历
def midTraversal(self, root):
if not root: return
self.midTraversal(root.left)
self.arr.append(root)
self.midTraversal(root.right)
AIの詳細については、AIMI-CN AI学習交換基[1015286623]
技術、生活の中で楽しく共有:公共の私達の数コンピュータビジョンこの小さな週プッシュ「AI」シリーズのニュース記事を、あなたの関心を歓迎します!