二叉搜索树转排序双向链表
示意图:
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
void ConvertNode(TreeNode* root, TreeNode *& lastnode)
{
if (root == NULL)
return;
TreeNode *pCur = root;
if (NULL!=pCur->left)
ConvertNode(pCur->left, lastnode);
pCur->left = lastnode;
if (NULL!=lastnode)
lastnode->right = pCur;
lastnode = pCur;
if (NULL!=pCur->right)
ConvertNode(pCur->right, lastnode);
}
TreeNode* Convert(TreeNode* pRootOfTree)
{
TreeNode *lastnode = NULL;
ConvertNode(pRootOfTree, lastnode);
TreeNode *pCur = lastnode;
while (pCur&&pCur->left) //pCur在排序双链表尾节点处
{
pCur = pCur->left;
}
return pCur;
}
};