劍指offer 二叉搜尋樹與雙向鍊錶

2022-01-26 07:58:15 字數 794 閱讀 8004

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

在二叉搜尋樹中,左子節點小於父節點,右子節點大於父節點。如果要轉為雙向鍊錶,要對二叉樹進行中序遍歷,遍歷結果就是鍊錶中節點的順序。將二叉樹分成三部分,根節點、左子樹、右子樹,將左子樹的最大值與根節點連線,右子樹的最小值與二叉樹連線。

public class solution 

public void con(treenode root)else

con(root.right); //向右遞迴}}

使用棧儲存二叉樹的最左子節點,然後依次出棧,改變出棧元素的leftright指標。如果出棧元素存在右子節點,則以右子節點為根節點進行出棧入棧操作。

public treenode convert(treenode prootoftree) 

prootoftree = stack.pop(); //出棧

if(head == null)else

prootoftree = prootoftree.right; //更新當前節點為右子節點

}return head;

}

劍指offer 二叉搜尋樹與雙向連線

題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。普通的二叉樹也可以轉換成雙向鍊錶,只不過不是排序的 思路 與中序遍歷相同 採用遞迴,先鏈結左指標,再鏈結右指標 1,更改doublelinkedlist,最後返回list的第乙...

《劍指offer》 二叉搜尋樹與雙向鍊錶

題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。解法 主要應用到二叉樹的中序遍歷。將左子樹遍歷進行不斷壓棧,然後再出棧。用兩個指標,current指向當前的樹的節點,pre指向前乙個節點,然後進行改指標引用,把壓棧的節點進行...

《劍指offer》二叉搜尋樹與雙向鍊錶

輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向 輸入一棵二叉搜尋樹 將該二叉搜尋樹轉換成乙個排序的雙向鍊錶 struct treenode class solution 按照中序遍歷,按照左子樹 根節點 右子樹的順序。include ...