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

2021-10-09 14:53:28 字數 1442 閱讀 9615

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

二叉樹節點的定義如下:

public

static

class

treenode

}

眾所周知,中序遍歷二叉搜尋樹會得到有序的序列,我們目標是在中序遍歷二叉搜尋樹過程中,逐步將其轉換成有序的雙向鍊錶。另外,將樹節點的左子樹指標轉換成雙向鍊錶節點的前驅指標,而樹節點的右子樹指標轉換成雙向鍊錶節點的後驅指標。

//1.執行到這步,左子樹已經轉換成有序雙向鍊錶

if(last != null)

last = current;

轉換成有序雙向鍊錶的新尾節點

if(current.right != null)

}}

import org.junit.assert;

import org.junit.test;

import com.lun.util.binarytree;

import com.lun.util.binarytree.treenode;

public

class

convertbsttolinkedlisttest

private treenode makeabst()

;return binarytree.

integerarray2binarysearchtree

(array);}

private string printlist

(treenode head)

p = p.right;

} result +=

"\n"

;while

(p != null)

return result;

}}

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

20.5.4 將 二叉搜尋樹 轉換成乙個 排序的迴圈雙向鍊錶 其中包含三個要素 排序鍊錶 節點應從小到大排序,因此應使用中序遍歷 從小到大 訪問樹的節點 雙向鍊錶 在構建相鄰節點 設前驅節點 pre 當前節點 cur 關係時,不僅應 pre.right cur,也應 cur.left pre 迴圈鍊...

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

輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。思路 public class treenode public class solution 右子樹轉換後,返回頭結點,連線在根節點右側 treenode rightnode conve...

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

輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的迴圈雙向鍊錶。要求不能建立任何新的節點,只能調整樹中節點指標的指向。為了讓您更好地理解問題,以下面的二叉搜尋樹為例 我們希望將這個二叉搜尋樹轉化為雙向迴圈鍊錶。鍊錶中的每個節點都有乙個前驅和後繼指標。對於雙向迴圈鍊錶,第乙個節點的前驅是最後乙個節點,...