C++二叉搜索樹與雙向鏈表(劍指Offer精簡版)

C++二叉搜索樹與雙向鏈表(劍指Offer精簡版)題目:輸入一棵二叉搜索樹,將該二叉搜素樹轉換成一個排序的雙向鏈表。
二叉樹節點定義以下:ide

struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};

解題思路:
因爲經過中序排序能夠轉化爲雙向鏈表,所以,經過中序遍歷的方法(左根右)的遞歸方法能夠解決問題,解決完以後,pList節點指向雙向鏈表的尾結點,pList節點須要經過遍歷,返回到頭節點,一樣,咱們也能夠經過逆向中序遍歷的方法之間完成,代碼以下:code

class Solution {
public:
    TreeNode* Convert(TreeNode* pRootOfTree)
    {
        TreeNode* pList=nullptr;//雙向鏈表的頭節點
        Convert(pRootOfTree,pList);
        return pList;
    }
    void Convert(TreeNode* pRootOfTree,TreeNode*& pList)
    {
        if(pRootOfTree==nullptr)//遞歸的出口
            return;
        if(pRootOfTree->right!=nullptr)//遞歸處理右子樹
            Convert(pRootOfTree->right,pList);
        pRootOfTree->right=pList;//right至關於pNext
        if (pList != nullptr)
            pList->left = pRootOfTree;//left至關於pPre
        pList = pRootOfTree;//pList節點從尾結點依次移動到頭節點
        if (pRootOfTree->left != nullptr)//遞歸處理左子樹
            Convert(pRootOfTree->left, pList);
    }
};
相關文章
相關標籤/搜索