输入一颗二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点。
type struct treenode
{
int value;
struct treenode *left;
struct treenode *right;
}treenode,*ptreenode;
void convertnode(ptreenode root, ptreenode *plastnode)//对二叉搜索树进行中序遍历
{
if(root == NULL)
return;
ptreenode curr = root;
if(curr->left != NULL)
convertnode(curr->left,plastnode);
curr->left = *plastnode;//当前结点的左指针指向原来指向最后一个结点的指针
if(*plastnode != NULL)
(*plastnode)->right = curr;//原来指向最后一个结点的指针不为空,则将其右指针指向当前结点
*plastnode = curr;//更新指向最后一个结点的指针
if(curr->right != NULL)
convernode(curr->right,plastnode);
}
ptreenode convert(ptreenode root)
{
ptreenode plastnode = NULL;
convertnode(root,&plastnode);
ptreenode head = plastnode;
while(head!=NULL && head->left!=NULL)//从双链表的最后一个结点找到第一个结点
head = head->left;
return head;
}