题解 | #二叉搜索树与双向链表#

二叉搜索树与双向链表

https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5

/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
class Solution {
public:
    TreeNode* Convert(TreeNode* pRootOfTree) {
	  //如果当前结点为空直接返回
        if(pRootOfTree==nullptr)
		{
			return nullptr;
		}
		else 
		{
			TreeNode* pre=Convert(pRootOfTree->left);//左边排序链表的起始结点
			
			TreeNode* next=Convert(pRootOfTree->right);//右边排序链表的起始结点
			
			while(pre!=nullptr&&pre->right!=nullptr)//左边移动到最后一个结点
			{
				pre=pre->right;
			}
			//连接左边中间和右边
			if(pre!=nullptr)//注意左右两边可能为空
				pre->right=pRootOfTree;
			pRootOfTree->right=next;
			if(next!=nullptr)
				next->left=pRootOfTree;
			pRootOfTree->left=pre;

		  
		  //返回排序好链表的最左边结点
			while(pRootOfTree!=nullptr&&pRootOfTree->left!=nullptr)
			{
				pRootOfTree=pRootOfTree->left;
			}
			return pRootOfTree;
		}
    }
};

使用中序递归遍历,在递归时做连接操作

全部评论
do a good job
点赞 回复 分享
发布于 2023-03-23 18:12 重庆

相关推荐

黑皮白袜臭脚体育生:简历条例统一按使用了什么技术实现了什么功能解决了问题或提升了什么性能指标来写会好些,如使用布隆过滤器实现了判断短链接是否存在,大大提升了查询速度
点赞 评论 收藏
分享
学不完不睡觉11:一眼点评,不过,看运气吧
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务