二叉搜尋樹與雙向鍊錶

2021-08-02 21:25:54 字數 895 閱讀 9708

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

要搞明白二叉搜尋樹的概念,二叉搜尋樹(bst),主要用來實現搜尋,它的左子樹元素小於根節點的元素,右節點的元素大於根節點的元素。

普通二叉樹的搜尋時間複雜度為o(n),二叉搜尋樹的平均搜尋時間複雜度變為o(logn)。

搜尋二叉樹舉例:

按照題目要求,最終的結果應該為:

可以看到這個順序和二叉樹的中序遍歷的結果一樣,中序遍歷的順序為左->根->右。

當遍歷到最左邊的葉子節點時,將葉子節點作為鍊錶的第乙個元素,然後遍歷這個葉子節點的根節點,作為第二個節點,最後是右節點,以此類推,自然而然想到使用遞迴。

而遞迴實際上是乙個壓棧的過程,實際使用中,空間複雜度較大。綜上分析,**如下:

/**

public class treenode

}**/

public

class

solution

convernode(rootnode.left);

// 遍歷到最左邊的葉子節點,也就是雙向鍊錶的第乙個節點時,將雙向鍊錶的左右頭節點都指向這個節點

if(leftheadnode == rightheadnode == null)else

convernode(rootnode.right);

return leftheadnode;}}

二叉搜尋樹與雙向鍊錶

1.問題描述 輸入一顆二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。來自 劍指offer 2.分析 對於二叉搜尋樹我們知道,樹的左孩子都比根節點要下,樹的右孩子都比根結點要大,根據這個特點,我們進行中序遍歷得到的序列就會滿足題目的要求,我們...

二叉搜尋樹與雙向鍊錶

問題描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。演算法 struct binarytreenode binarytreenode convert binarytreenode prootoftree plastnodeinl...

二叉搜尋樹與雙向鍊錶

排序二叉樹與雙向鍊錶.cpp 定義控制台應用程式的入口點。題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。思路 通過對一顆排序二叉樹的認識可知一顆排序二叉樹中序輸出就是有序的 通過後序遍歷讓子樹分別找到自己的left和rig...