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

二叉搜索树与双向链表

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) {
	}
};*/
#include <cstddef>
class Solution {
public:
	void SimInThreadTBT(TreeNode* Node,TreeNode** pre)
	{	
		if(Node == nullptr) return;
		SimInThreadTBT(Node->left, pre);
	  	//因为它不需要保证他的树型结构,也就不需要判断子结点是不是要为空
		//处理本结点的前驱
		Node->left = *pre;
		//处理前驱结点的后继
		if((*pre) != nullptr)
		{
			(*pre)->right = Node;
		}
		(*pre) = Node;
		SimInThreadTBT(Node->right,pre);
	}
    TreeNode* Convert(TreeNode* pRootOfTree) {
        //转为类中序线索二叉树的创建
		if(pRootOfTree == nullptr) return nullptr;

		TreeNode* pre = nullptr;
		SimInThreadTBT(pRootOfTree,&pre);
		
		//处理最后一个结点  
		pre->right = nullptr;

		//找到他的起始结点
		TreeNode* p = pRootOfTree;
		while(p->left != nullptr)
		{
			p = p->left;
		}
		return p;
    }
};

全部评论

相关推荐

头像
11-18 16:08
福州大学 Java
影流之主:干10年不被裁,我就能拿别人一年的钱了,日子有盼头了
点赞 评论 收藏
分享
勇敢的联想人前程似锦:如果我是你,身体素质好我会去参军,然后走士兵计划考研211只需要200多分。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务