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)