/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
stack<TreeNode*> s; //可以换成vector
//翻转的中序遍历
void LDR(TreeNode* p)
{
if(p->right!=NULL){
LDR(p->right);
}
s.push(p);
if(p->left!=NULL){
LDR(p->left);
}
}
TreeNode* Convert(TreeNode* pRootOfTree)
{
if(pRootOfTree==NULL) return NULL;
if(pRootOfTree->left==NULL && pRootOfTree->right==NULL)
return pRootOfTree;
LDR(pRootOfTree);
TreeNode* head = s.top();
TreeNode* p = head;
head->left = NULL;
TreeNode* q;
s.pop();
while(!s.empty())
{
q = s.top();
s.pop();
p->right = q;
q->left = p;
p = q;
p->right = NULL;
}
return head;
}
};