/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
//递归解法
TreeNode* convertNode(TreeNode* root){
if (NULL == root)
return NULL;
if (root->left){
TreeNode* leftNode = convertNode(root->left);
while (leftNode->right)
leftNode = leftNode->right;
leftNode->right = root;
root->left = leftNode;
}
if (root->right)
{
TreeNode *rightNode = convertNode(root->right);
while (rightNode->left)
rightNode = rightNode->left;
rightNode->left = root;
root->right = rightNode;
}
return root;
}
TreeNode* Convert(TreeNode* pRootOfTree)
{
if (NULL == pRootOfTree)
{
return NULL;
}
pRootOfTree = convertNode(pRootOfTree);
while (pRootOfTree->left)
{
pRootOfTree = pRootOfTree->left;
}
return pRootOfTree;
}
//非递归解法
TreeNode* Convert2(TreeNode* pRootTree){
if (NULL == pRootTree)
return NULL;
TreeNode*head, *pre = NULL; //pre记录上一次出栈值
stack<TreeNode*> ss;
while (pRootTree || !ss.empty())
{
while (pRootTree)
{
ss.push(pRootTree);
pRootTree = pRootTree->left;
}
if (!ss.empty()){
pRootTree = ss.top();
ss.pop();
if (pre != NULL){
pre->right = pRootTree;
pRootTree->left = pre;
}else //pre为空,表示ss第一次出栈,为最左值
head = pRootTree;
pre = pRootTree;
pRootTree = pRootTree->right;
}
}
return head;
}