將二叉搜尋樹轉化成有序的雙向鍊錶

2021-10-05 17:28:40 字數 720 閱讀 7295

問題描述:

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

二叉樹的節點定義如下:

struct node;
由於該樹是二叉排序樹,所以每個根節點的左指標指向的是其左子樹的最右下角的節點,右指標指向的應當是其右子樹的最左下的節點。

基於以上結論,我們可以寫出如下的**:

struct node ;

node * converttree(node * rootoftree)

return lastnodeinlist;

}node * converttree(node * rootoftree, node * lastnodeinlist)

node * currentp=rootoftree;

if(currentp->left!=null)

/****************///類似於中序遍歷的訪問當前節點

currentp->left=lastnodeinlist;

if(lastnodeinlist!=null)

lastnodeinlist=currentp;

/*****************/

if(currentp->right!=null)

}

二叉搜尋樹轉化成雙向鍊錶

輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。其中乙個測試用例 按層序遍歷輸入 對應輸出應該為 from left to right are 4,6,8,10,12,14,16 from right to left are 16,1...

有序鍊錶轉化成搜尋二叉樹

給定乙個單鏈表,其中的元素按公升序排序,將其轉換為高度平衡的二叉搜尋樹。本題中,乙個高度平衡二叉樹是指乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。示例 給定的有序鍊錶 10,3,0,5,9 乙個可能的答案是 0,3,9,10,null,5 它可以表示下面這個高度平衡二叉搜尋樹 0 ...

將排序二叉樹轉化成雙向鍊錶

將排序二叉樹轉化成雙向鍊錶,應該是一道很常見的面試題目,網上的實現比較多,有用遞迴也有用中序遍曆法的。看到一位外國友人的實現,還是比較清晰的,思路如下 1,如果左子樹不為null,處理左子樹 1.a 遞迴轉化左子樹為雙向鍊錶 1.b 找出根結點的前驅節點 是左子樹的最右的節點 1.c 將上一步找出的...