輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的節點,只能調整樹中節點指標的指向。二叉樹節點的定義如下:
public
class
treenode
}
很明顯該題考察的是樹的中序遍歷演算法,即用遞迴和非遞迴分別實現。**如下:
//遞迴的中序遍歷演算法
treenode lastnode=null;
treenode realhead=null;
public treenode inorderconvert
(treenode root)
else
inorderconvert
(root.right)
;return realhead;
}//非遞迴的中序遍歷演算法
public treenode convert
(treenode prootoftree)if(
!stack.
empty()
)}while
(prootoftree!=null&&prootoftree.left!=null)
return prootoftree;
}
36 二叉搜尋樹與雙向鍊錶
輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。解析 這道題一開始看答案都無法理解,後來終於弄懂了 就是將二叉樹的left和right轉化為鍊錶節點的左右指標,因為是按照從小到大順序所以就得是中序遍歷,得到每個節點,然後就是對節點進行...
劍指 36 二叉搜尋樹與雙向鍊錶
題目描述輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的 結點,只能調整樹中結點指標的指向。思路 需要注意,last 在函式裡,用的是 指標的指標。如果不這樣做,會報錯 自己對指標這部分理解的也不是很深,這部分以後還要再好好看看 struct treenode cla...
二叉搜尋樹與雙向鍊錶
1.問題描述 輸入一顆二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。來自 劍指offer 2.分析 對於二叉搜尋樹我們知道,樹的左孩子都比根節點要下,樹的右孩子都比根結點要大,根據這個特點,我們進行中序遍歷得到的序列就會滿足題目的要求,我們...