旧魏は、あなたが学ぶために取るために提供---ブラシタイトルシリーズを獲得(26二分探索木と二重リンクリスト)

26.二分探索木と二重リンクリスト

問題:

バイナリ検索ツリーを入力し、二重リンクリストに変換し、バイナリ検索ツリーは、ソートされました。要件は、ツリーのノードポインタを調整するために、ポイントを任意の新しいノードを作成することはできません。

ソリューション:

思想:

この質問は、注文トラバーサル機能では、バイナリツリーのテストです。私たちは、バイナリツリーは、そのソート順を取得する予定です**順トラバーサルに知っておく必要があります。**私たちはこの特徴によれば、注文バイナリツリートラバーサルで、その後、二重にリンクされたリストを使用することができ、あなたは自分の道にリンクされたリストによると、それらを並べ替えることができます。
ここに画像を挿入説明

Pythonコード:

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    def Convert(self, pHead):
        # write code here
        
        self.LastNode=None
        self.inorder(pHead)
        while(self.LastNode and self.LastNode.left):   ###从后往前寻找头节点。
            self.LastNode=self.LastNode.left
        return self.LastNode
    def inorder(self,root):
        if root:
            current=root
            if root.left:
                self.inorder(root.left)
            
            current.left=self.LastNode   ### 这里建立双向链表
            if(self.LastNode):
                self.LastNode.right=current
                
            self.LastNode=current   ###每次使LastNode指向新访问的节点(B,A,C)
                
            if root.right:
                self.inorder(root.right)

公開された160元の記事 ウォン称賛30 ビュー70000 +

おすすめ

転載: blog.csdn.net/yixieling4397/article/details/104954424