输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。。
使用递归和中序排列进行改变二叉树节点的左右值。
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
void con(TreeNode *pRootOfTree,TreeNode* &prev)
{
if(pRootOfTree==nullptr)
{
return;
}
con(pRootOfTree->left,prev);
pRootOfTree->left=prev;
if(prev)
{
prev->right=pRootOfTree;
}
prev=pRootOfTree;
con(pRootOfTree->right,prev);
}
TreeNode* Convert(TreeNode* pRootOfTree)
{
if(nullptr==pRootOfTree)
{
return NULL;
}
TreeNode* prev=nullptr;
TreeNode *head=pRootOfTree;
while(head->left!=nullptr)
{
head=head->left;
}
con(pRootOfTree,prev);
return head;
}
};