1. 程式人生 > >【牛客】二叉搜尋樹與雙向連結串列

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

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

思路:
1、樹為空,直接返回
2、樹只有一個節點,將其根節點返回
3、定義一個指標pre指向訪問過的節點,然後使用遞迴的思想實現
4.遞迴左子樹,找到最左邊節點
5.將當前節點的左指標指向pre,如果pre不為空,將pre的右指標指向當前節點
6.遞迴右子樹
7、定義一個頭指標,然後將其指向新連結串列的頭部,返回。

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};*/
class Solution { public: void ConvertSub(TreeNode* pCur,TreeNode*& pre) { if(pCur==NULL) return; //找最左邊節點 if(pCur->left) ConvertSub(pCur->left,pre); pCur->left=pre;//left //改變指標指向 if(pre!=NULL) pre->
right=pCur;//right pre=pCur; //處理右子樹 if(pCur->right) ConvertSub(pCur->right,pre); } TreeNode* Convert(TreeNode* pRootOfTree){ if(pRootOfTree==NULL) return NULL; if(pRootOfTree->left==NULL&&pRootOfTree->right==NULL
) return pRootOfTree; TreeNode* pre=NULL; TreeNode* head=NULL; ConvertSub(pRootOfTree,pre); head=pre; while(head->left) head=head->left; return head; } };