劍指offer 二叉搜尋樹與雙向連線

2021-09-01 09:20:11 字數 2300 閱讀 9628

題目描述

輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。

普通的二叉樹也可以轉換成雙向鍊錶,只不過不是排序的

思路:與中序遍歷相同

採用遞迴,先鏈結左指標,再鏈結右指標

**1,更改doublelinkedlist,最後返回list的第乙個元素:

class

treenode

:def

__init__

(self, x)

: self.val = x

self.left =

none

self.right =

none

class

solution

:def

lastelem

(self,

list):

iflen

(list)==

0:return

none

else

:return

list

[len

(list)-

1]defconvertcore

(self, proot, doublelinkedlist)

:if proot:

if proot.left:

self.convertcore(proot.left, doublelinkedlist)

proot.left = self.lastelem(doublelinkedlist)

if self.lastelem(doublelinkedlist)

: self.lastelem(doublelinkedlist)

.right = proot

if proot.right:

self.convertcore(proot.right, doublelinkedlist)

defconvert

(self, prootoftree)

:if prootoftree ==

none

:return

none

doublelinkedlist =

self.convertcore(prootoftree, doublelinkedlist)

return doublelinkedlist[

0]

**2,lastlistnode指向雙向鍊錶中的最後乙個節點,因此每次操作最後乙個節點。這裡要更改值,因此採用list的形式。

class

treenode

:def

__init__

(self, x)

: self.val = x

self.left =

none

self.right =

none

class

solution

:def

convertcore

(self, proot, lastlistnode)

:if proot:

if proot.left:

self.convertcore(proot.left, lastlistnode)

proot.left = lastlistnode[0]

if lastlistnode[0]

: lastlistnode[0]

.right = proot

lastlistnode[0]

= proot

if proot.right:

self.convertcore(proot.right, lastlistnode)

defconvert

(self, prootoftree)

:# write code here

if prootoftree ==

none

:return

none

lastlistnode =

[none

] self.convertcore(prootoftree, lastlistnode)

while lastlistnode[0]

.left:

lastlistnode[0]

= lastlistnode[0]

.left

return lastlistnode[

0]

《劍指offer》 二叉搜尋樹與雙向鍊錶

題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。解法 主要應用到二叉樹的中序遍歷。將左子樹遍歷進行不斷壓棧,然後再出棧。用兩個指標,current指向當前的樹的節點,pre指向前乙個節點,然後進行改指標引用,把壓棧的節點進行...

《劍指offer》二叉搜尋樹與雙向鍊錶

輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向 輸入一棵二叉搜尋樹 將該二叉搜尋樹轉換成乙個排序的雙向鍊錶 struct treenode class solution 按照中序遍歷,按照左子樹 根節點 右子樹的順序。include ...

劍指Offer 二叉搜尋樹與雙向鍊錶

輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。struct treenode class solution if prootoftree right treenode head find head while head left r...