樹的遞迴操作說來說去就這麼幾個,這裡很明顯要用中序,因為要形成的是從小到大的雙向鍊錶。bst的中序就是從小到大的。
這裡的中序就難在根那個地方的操作。遞迴函式需要乙個指標的引用來作為前乙個結點(pre),pre的初值為空指標。遞迴函式先進行左子樹的遞迴,遞迴到最左的結點後,將其left改為pre(這樣你就知道pre的初值為什麼是空指標了,因為最左的結點的left是不可能有數字的)。如果pre不為空,就將pre的right改為當前結點。將pre改為root。我們可以想象pre是指向你自己構建的鍊錶的最後乙個元素的,它需要更新。然後遞迴右子樹。
因為要返回鍊錶的頭結點,所以我們從根結點迴圈訪問它的left,直到left為空,就返回當前結點
/*
struct treenode
};*/
class
solution
treenode*
convert
(treenode* prootoftree)
};
劍指offer 二叉搜尋樹與雙向連線
題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。普通的二叉樹也可以轉換成雙向鍊錶,只不過不是排序的 思路 與中序遍歷相同 採用遞迴,先鏈結左指標,再鏈結右指標 1,更改doublelinkedlist,最後返回list的第乙...
《劍指offer》 二叉搜尋樹與雙向鍊錶
題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。解法 主要應用到二叉樹的中序遍歷。將左子樹遍歷進行不斷壓棧,然後再出棧。用兩個指標,current指向當前的樹的節點,pre指向前乙個節點,然後進行改指標引用,把壓棧的節點進行...
《劍指offer》二叉搜尋樹與雙向鍊錶
輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向 輸入一棵二叉搜尋樹 將該二叉搜尋樹轉換成乙個排序的雙向鍊錶 struct treenode class solution 按照中序遍歷,按照左子樹 根節點 右子樹的順序。include ...