用c语言编写一个完整的代码:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表
时间: 2023-03-14 08:24:00 浏览: 119
#include <stdio.h>
#include <stdlib.h>/* 二叉搜索树结点定义 */
typedef struct BSTNode
{
int data;
struct BSTNode *lchild, *rchild;
} BSTNode;/* 双向链表结点定义 */
typedef struct DLLNode
{
int data;
struct DLLNode *prior, *next;
} DLLNode;/* 二叉搜索树与双向链表转换函数 */
DLLNode* BSTToDLL(BSTNode *root)
{
DLLNode *pFirst = NULL, *pLast = NULL;
if (root != NULL)
{
/* 将左子树转换为双向链表 */
if (root->lchild != NULL)
{
pFirst = BSTToDLL(root->lchild);
/* 左子树双向链表的最后一个结点为根结点 */
pLast = pFirst->prior;
/* 根结点指向左子树双向链表最后一个结点 */
root->lchild = pLast;
/* 左子树双向链表最后一个结点指向根结点 */
pLast->next = root;
}
else
{
/* 根结点为双向链表的第一个结点 */
pFirst = root;
}
/* 根结点指向其右子树 */
if (root->rchild != NULL)
{
/* 将右子树转换为双向链表 */
DLLNode *pRight = BSTToDLL(root->rchild);
/* 根结点指向右子树双向链表的第一个结点 */
root->rchild = pRight;
/* 右子树双向链表的第一个结点指向根结点 */
pRight->prior = root;
/* 双向链表的最后一个结点为右子树双向链表的最后一个结点 */
pLast = pRight->prior;
}
else
{
/* 根结点为双向链表的最后一个结点 */
pLast = root;
}
}
pFirst->prior = pLast;
pLast->next = pFirst;
return pFirst;
}int main()
{
return 0;
}答:我已经给出了一段用C语言编写的代码,它用于将一棵二叉搜索树转换为一个排序的双向链表。
阅读全文