解题思路:
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
vector<TreeNode*>treelist;
TreeNode* Convert(TreeNode* pRootOfTree) {
if(!pRootOfTree){
return pRootOfTree;
}
inorder(pRootOfTree);//中序遍历
//当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继
for(int i = 0; i < treelist.size()-1; i++){
treelist[i]->right = treelist[i+1];//树中节点的右指针需要指向后继
treelist[i+1]->left = treelist[i];//树中节点的左指针需要指向前驱
}
return treelist[0];
}
void inorder(TreeNode* root){
if(!root){
return;
}
inorder(root->left);
treelist.push_back(root);
inorder(root->right);
}
};
时间复杂度:O(N),等于中序遍历的时间复杂度。
空间复杂度:O(N),开辟了一个数组来存储结点。