面试题36:二叉搜索树与双向链表

#include <iostream>
struct BinaryTreeNode
{
	int m_nValue;
	BinaryTreeNode* pLeft, * pRight;
	BinaryTreeNode(int _value) :m_nValue(_value), pLeft(nullptr), pRight(nullptr) {}
};

void ConvertNode(BinaryTreeNode* pNode, BinaryTreeNode* pLastNodeInlist)
{
	if (pNode == nullptr)return;
	BinaryTreeNode* pCurrent = pNode;
	if(pCurrent->pLeft!=nullptr)
		ConvertNode(pCurrent->pLeft, pLastNodeInlist);
	pCurrent->pLeft = pLastNodeInlist;//当前节点的左指针变前指针指向前一个节点
	if (pLastNodeInlist != nullptr)
		pLastNodeInlist->pRight = pCurrent;//如果前一个节点不为空,则前一个节点的右指针变后指针指向当前节点
	pLastNodeInlist = pCurrent;//移动到当前节点
	if (pCurrent->pRight != nullptr)
		ConvertNode(pNode->pRight, pLastNodeInlist);

}

BinaryTreeNode* Convert(BinaryTreeNode* pRoot)
{
	if (pRoot == nullptr)return nullptr;
	BinaryTreeNode* pLastNodeInlist = nullptr;
	ConvertNode(pRoot, pLastNodeInlist);//pLastNodeInlist最终为链表的最后一个节点
	while (pLastNodeInlist->pLeft)
		pLastNodeInlist = pLastNodeInlist->pLeft;
	BinaryTreeNode* head = pLastNodeInlist;
	return head;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值