《劍指offer》系列 二叉搜尋樹與雙向連結串列(Java)
阿新 • • 發佈:2018-11-25
連結
牛客: 二叉搜尋樹與雙向連結串列
題目描述
輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。
思路
這個程式碼是借鑑網上的,整體結構和中序遍歷非常類似,只不過將原本輸出那部分的操作換成了改變結點的方向。
程式碼
public class Solution { //需要兩個輔助結點 head和realHead //head一直在變,realHead是一開始的結點 其實也就是最左邊的結點 TreeNode head = null; TreeNode realHead = null; public TreeNode Convert(TreeNode pRootOfTree) { ConvertSub(pRootOfTree); return realHead; } private void ConvertSub(TreeNode pRootOfTree) { if(pRootOfTree == null) return; ConvertSub(pRootOfTree.left);、、 //當遍歷到最左邊結點的時候,賦值給head和realHead realHead不會再變 //當遍歷到其他結點的時候,將head和這個結點前後連結起來就可以了 因為是按照中序遍歷的順序來的 if (head == null) { head = pRootOfTree; realHead = pRootOfTree; } else { head.right = pRootOfTree; pRootOfTree.left = head; head = pRootOfTree; } ConvertSub(pRootOfTree.right); } }