题解 | #二叉搜索树与双向链表#
二叉搜索树与双向链表
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; } };