1. 程式人生 > >《劍指offer》系列 二叉搜尋樹與雙向連結串列(Java)

《劍指offer》系列 二叉搜尋樹與雙向連結串列(Java)

連結

牛客: 二叉搜尋樹與雙向連結串列

題目描述

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

思路

這個程式碼是借鑑網上的,整體結構和中序遍歷非常類似,只不過將原本輸出那部分的操作換成了改變結點的方向。

程式碼

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);
    }
}