1. 程式人生 > >劍指offer題解(二叉樹與雙向連結串列)

劍指offer題解(二叉樹與雙向連結串列)

題目描述


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

 

解題思路

 

中序遍歷搜尋二叉樹,用pre儲存中序遍歷的前一個節點,cur為當前節點,然後使pre->right=cur,cur->left=pre;

(注意pre要宣告為常指標,初始時pre為空),最後從根節點向左遍歷,找到頭指標。

 

程式碼

 

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};*/
class Solution {
public:
    TreeNode* Convert(TreeNode* pRootOfTree)
    {
        if(pRootOfTree==nullptr)
            return nullptr;
        TreeNode *pre=nullptr;
        midV(pRootOfTree,pre);
        TreeNode *res=pRootOfTree;
        while(res->left)
        {
            res=res->left;
        }
        return res;
        
    }
    void midV(TreeNode *cur,TreeNode *& pre)
    {
        if(cur==nullptr)
            return;
        midV(cur->left,pre);
        cur->left=pre;
        if(pre) pre->right=cur;
        pre=cur;
        midV(cur->right,pre);
        
    }
};