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

2021-09-23 17:14:53 字數 1338 閱讀 7860

題目描述

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

主要考察二叉樹的中序遍歷;

/*

struct treenode

};*/

class

solution

leftlast = prootoftree;

treenode* rightsublist =

convert

(prootoftree-

>right)

; prootoftree-

>right = rightsublist;

if(rightsublist)

rightsublist-

>left = prootoftree;

return

!leftsublist ? prootoftree : leftsublist;}}

;

方法二:

解題思路:

1.核心是中序遍歷的非遞迴演算法。

2.修改當前遍歷節點與前一遍歷節點的指標指向。

/*

struct treenode

};*/

class

solution

currentnode = assiststack.

top();

assiststack.

pop();

currentnode-

>left = pre;

if(pre)

pre-

>right = currentnode;

else

listhead = currentnode;

pre = currentnode;

currentnode = currentnode-

>right;

}return listhead;}}

;

方法三:

思路:使用佇列。 先將二叉搜尋樹的中序遍歷序列儲存在佇列中,之後再依次出隊,將處理左右指標的指向即可。

注意:在佇列中儲存的是treenode*,不是節點的val值。

/*

struct treenode

};*/

class

solution

}public

: treenode*

convert

(treenode* prootoftree)

return listhead;}}

;

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

題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。普通的二叉樹也可以轉換成雙向鍊錶,只不過不是排序的 思路 與中序遍歷相同 採用遞迴,先鏈結左指標,再鏈結右指標 1,更改doublelinkedlist,最後返回list的第乙...

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

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

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

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