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

二叉搜索树与双向链表

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* divide(TreeNode* pRootOfTree,TreeNode* pf)
	{

    if((!pRootOfTree->left)&&(!pRootOfTree->right)) 
	{
    if(pf->left==pRootOfTree)
	{
		pRootOfTree->right=pf;
	    return pRootOfTree;
	}
	else 
	{
		pRootOfTree->left=pf;
		return pRootOfTree;
	}
	}
	else 
	{
	    if(pRootOfTree->left)
	    {
			pRootOfTree->left=divide(pRootOfTree->left,pRootOfTree);
			pRootOfTree->left->right=pRootOfTree;
		}
	    if(pRootOfTree->right)
        {
			pRootOfTree->right=divide(pRootOfTree->right,pRootOfTree);
			pRootOfTree->right->left=pRootOfTree;
		}
		if(pf->left==pRootOfTree)
		{
		while(pRootOfTree->right)
		{
             pRootOfTree=pRootOfTree->right;
		}
		return pRootOfTree;
		}
		else
        {
		while(pRootOfTree->left)
		{
             pRootOfTree=pRootOfTree->left;
		}
		return pRootOfTree;			
		}   
	}


	}

    TreeNode* Convert(TreeNode* pRootOfTree) {
	if(!pRootOfTree){return pRootOfTree;}
	if( pRootOfTree->left)
    {pRootOfTree->left=divide(pRootOfTree->left,pRootOfTree);pRootOfTree->left->right=pRootOfTree;}
	if( pRootOfTree->right)
    {pRootOfTree->right=divide(pRootOfTree->right,pRootOfTree);pRootOfTree->right->left=pRootOfTree;}
    
	while(pRootOfTree->left)
	{
		pRootOfTree=pRootOfTree->left;
	}
	return pRootOfTree;
    }
};

全部评论

相关推荐

07-24 03:49
门头沟学院 Java
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-30 11:32
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务