采用中序遍历:
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
void dfs(vector<TreeNode*>& v,TreeNode* p){
if(p == NULL) return ;
dfs(v,p->left);
v.push_back(p);
dfs(v,p->right);
}
void doit(vector<TreeNode*> v){
int l = v.size();
v[0]->left = NULL;
for(int i=1;i<l;i++){
v[i-1]->right = v[i];
v[i]->left = v[i-1];
}
v[l-1]->right = NULL;
}
TreeNode* Convert(TreeNode* pRootOfTree)
{
if(pRootOfTree == NULL) return NULL;
vector<TreeNode*> v;
dfs(v,pRootOfTree);
doit(v);
return v[0];
}
};