面试经典(24)--二叉搜索树和双向链表

本文详细介绍了如何使用后续遍历方法,将给定的二叉搜索树转换为排序的双向链表。通过递归修改节点间的连接,确保最终形成有序链表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。


算法分析:使用后续遍历方法。从10节点开始分析,只要左子树返回最大节点,右子树返回最小节点即可。正常递归无法判定当前是左子树还是右子树,所以参数要假如bool值判定左右子树。

//将二叉树搜索树改成双向链表
struct Node *convertNode(struct Node *pNode,bool asRight)
{
	if(!pNode)
		return NULL;
	struct Node *pLeft;
	struct Node *pRight;

	//递归修改左子树
	pLeft=convertNode(pNode->left,false);

	//当前节点和左子树链连接
	if(pLeft)
		pLeft->right=pNode;
	pNode->left=pLeft;


	//递归修改右子树
	pRight=convertNode(pNode->right,true);

	//当前节点和右子树连接,注意判定条件不要忘记
	if(pRight)
		 pRight->left=pNode;
	pNode->right=pRight;


	struct Node* pTemp=pNode;

	//根据asRight返回最大或者最小节点
	if(asRight)
		while(pTemp->left)
			pTemp=pTemp->left;
	else
		while(pTemp->right)
			pTemp=pTemp->right;
	return pTemp;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值