牛客解題思路 二叉搜尋樹與雙向鍊錶

2021-10-23 17:53:00 字數 1338 閱讀 5752

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

首先,只要提到是二叉搜尋樹,那麼一定會涉及到中序遍歷,那麼這一題我們只需要進行一遍中序遍歷即可,在遍歷的過程中將當前節點和上乙個節點進行雙向的鏈結(指向)即可。->由於我們需要返回鍊錶的頭節點,那麼我們肯定需要定義乙個變數來儲存頭節點,另外,我們在將當前節點和上一節點建立鏈結時,需要獲取中序遍歷的上一節點,因此我們還需要乙個變數來儲存上一節點

public treenode pre = null;

public treenode head = null;

那我們如何給head賦值呢,首先中序遍歷的第乙個節點即為最小節點,那麼這個節點就是head,簡單來說,也就是head為空時賦值的第乙個節點就是head,賦值一次後不再改變,而pre是當前節點的上乙個節點,是時刻變化的,但是最初可以將其設定為第乙個被遍歷到的節點,所以中序遍歷中更新方法如下:

if

(pre == null)

else

if(head == null) head = cur;

完整**如下:

public treenode pre = null;

public treenode head = null;

public treenode convert

(treenode prootoftree)

public

void

inorder

(treenode cur)

else

if(head == null) head = cur;

inorder

(cur.right)

;}

第二次寫:

node pre = null;

node head = null;

public node treetodoublylist

(node root)

public

void

inorder

(node root)

if(pre == null)

else

inorder

(root.right)

;}

一定要記得將頭尾相連吖,可不能掉了最後這句

inorder

(root)

;head.left = pre;

pre.right = hea

牛客網 二叉搜尋樹與雙向鍊錶

附上題目連線 題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。這道題有點意思,有助於理解遞迴,其實不用遞迴應該比較好點,用個佇列 就夠了。說下我的思路,用個pre指標來記錄中序遍歷中結點的前驅結點,再用ppre 儲存在每個遞...

牛客網 二叉搜尋樹與雙向鍊錶

輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。解題思路 1.將左子樹構造成雙鏈表,並返回煉表頭節點。2.定位至左子樹雙鏈表最後乙個節點。3.如果左子樹煉表不為空的話,將當前root追加到左子樹鍊錶。4.將右子樹構造成雙鏈表,並返回煉...

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

輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。struct treenode class solution private dfs,用兩個指標的引用來返回子樹連線後的頭和尾,然後左子樹的尾和右子樹的頭與根節點連線,再將左子樹的頭和右...