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