題目描述:輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。
思路:首先,二叉搜尋樹的中序遍歷就是有序的,因此我們借用中序遍歷的概念
二叉搜尋樹的特點: 左子樹的值 < 根節點的值 < 右子樹的值
因此只要將左子樹最右邊的節點與根節點與右子樹最左側的節點連線就可以得到乙個有序鍊錶。
先對樹進行遍歷得到最左側的節點,也就是整棵樹最小的節點
再找右子樹中最小的節點
將這兩個節點與根節點連線起來
遞迴實現。
//plastnode始終指向鍊錶的最後乙個節點
treenode* plastnode = nullptr;
convertnode(prootoftree, &plastnode);
treenode* pheadnode = plastnode;
//找到左子樹轉換後的最後乙個節點
while (pheadnode != nullptr&&pheadnode->left != nullptr)
//我們需要返回頭結點
return pheadnode;
} void convertnode(treenode* prootnode, treenode** plastnode)
treenode* curnode = prootnode;
if (curnode->left != nullptr)
curnode->left = *plastnode;
if (*plastnode != nullptr)
//將當前節點儲存為尾節點,接續遍歷
*plastnode = curnode;
if (curnode->right != nullptr)}};
劍指offer 二叉搜尋樹與雙向連線
題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。普通的二叉樹也可以轉換成雙向鍊錶,只不過不是排序的 思路 與中序遍歷相同 採用遞迴,先鏈結左指標,再鏈結右指標 1,更改doublelinkedlist,最後返回list的第乙...
《劍指offer》 二叉搜尋樹與雙向鍊錶
題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。解法 主要應用到二叉樹的中序遍歷。將左子樹遍歷進行不斷壓棧,然後再出棧。用兩個指標,current指向當前的樹的節點,pre指向前乙個節點,然後進行改指標引用,把壓棧的節點進行...
《劍指offer》二叉搜尋樹與雙向鍊錶
輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向 輸入一棵二叉搜尋樹 將該二叉搜尋樹轉換成乙個排序的雙向鍊錶 struct treenode class solution 按照中序遍歷,按照左子樹 根節點 右子樹的順序。include ...