题解 | #二叉搜索树与双向链表#
二叉搜索树与双向链表
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]; //返回数组头(也就是链表头) } };