方法一:
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
TreeNode* Converts(TreeNode* pRootOfTree)
{
if(pRootOfTree == NULL)
return NULL;
TreeNode* tmp_left = Converts(pRootOfTree -> left);
pRootOfTree -> left = tmp_left;
if(tmp_left != NULL)
tmp_left -> right = pRootOfTree;
if(!first)
{
first = true;
pHead = pRootOfTree;
}
TreeNode* tmp_right = Converts(pRootOfTree -> right);
pHead_tmp = tmp_right;
while(tmp_right != NULL && tmp_right -> left != NULL){
tmp_right = tmp_right -> left;
}
pRootOfTree -> right = tmp_right;
if(tmp_right != NULL){
tmp_right -> left = pRootOfTree;
return tmp_right;
}else
return pRootOfTree;
return NULL;
}
TreeNode* Convert(TreeNode* pRootOfTree)
{
if(pRootOfTree == NULL)
return NULL;
Converts(pRootOfTree);
return pHead;
}
TreeNode* pHead_tmp;
TreeNode* pHead;
bool first = false;
};
方法二:
class Solution {
public:
TreeNode* Convert(TreeNode* pRootOfTree)
{
TreeNode * node = NULL;
TreeNode * pHead;
stack<TreeNode *> stacks;
if(pRootOfTree == NULL)
return NULL;
stacks.push(pRootOfTree);
pRootOfTree = pRootOfTree -> left;
while(stacks.size() != 0 || pRootOfTree != NULL){
while(pRootOfTree != NULL){
stacks.push(pRootOfTree);
pRootOfTree = pRootOfTree -> left;
}
if(node == NULL){
node = stacks.top();
pHead = node;
pRootOfTree = stacks.top() -> right;
stacks.pop();
}else{
node -> right = stacks.top();
stacks.top() -> left = node;
pRootOfTree = stacks.top() -> right;
stacks.pop();
node = node -> right;
}
}
return pHead;
}
};