题解 | #二叉搜索树与双向链表#

二叉搜索树与双向链表

http://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5

中序遍历+数组
class Solution {
public:
    vector<TreeNode*> myvec;
    
    void dfs(TreeNode* curr){
        if(!curr) return;
        
        dfs(curr->left);
        myvec.push_back(curr);
        dfs(curr->right);
    }
    
    void opt(vector<TreeNode*> arr){
        int size= arr.size();
        for(int i=0;i<size;i++){
            if(i==0) arr[0]->right=arr[1];
            else if(i==size-1) arr[size-1]->left=arr[size-2];
            else{
                arr[i]->left= arr[i-1];
                arr[i]->right= arr[i+1];
            }
        }
    }
    
    TreeNode* Convert(TreeNode* pRootOfTree) {
        if(!pRootOfTree) return nullptr;
        TreeNode* curr= pRootOfTree;
        
        dfs(curr);    //中序遍历存到数组
        opt(myvec);    //在数组里进行节点指针调整
        
        return myvec[0];    //返回数组头(也就是链表头)
    }
};


全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务