1. 程式人生 > >劍指offer刷題記錄26——二叉搜尋樹與雙向連結串列

劍指offer刷題記錄26——二叉搜尋樹與雙向連結串列

題目描述

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

public class Solution {
    public TreeNode Convert(TreeNode root) {

        //正常的空值判斷
        if(root == null) return null;
        if(root.left == null && root.right == null) return root;

    //1、處理左邊的子樹
        TreeNode left = Convert(root.left);
        TreeNode p = left;
        while(p != null && p.right != null){
            p = p.right;
        }

        //(1)左子樹最後一個結點增加右邊指向根結點的指標
        if(left != null){
            p.right = root;
            root.left = p;
        }
    //2、處理右邊的子樹
        TreeNode right = Convert(root.right);

        //(2)右子樹的第一個一個結點增加左邊指向根結點的指標
        if(right != null){
            right.left = root;
            root.right = right;
        }

        return left != null ? left : root;       
    }
}