通常来说常规思路是通过中序遍历将节点保存下来,这里提供一种递归合并链表的解题思路:递归左右子树,遍历左子树到最后一个节点lastNo,随后将left list root right list拼接起来即可
class Solution {
public:
TreeNode* Convert(TreeNode* pRootOfTree)
{
if (pRootOfTree==NULL)
{
return NULL;
}
auto left = Convert(pRootOfTree->left);
auto right = Convert(pRootOfTree->right);
auto lastNode = findLastNode(left);
if(lastNode==NULL){
left = pRootOfTree;
}
else
{
pRootOfTree->left = lastNode;
lastNode->right = pRootOfTree;
}
if (right==NULL)
{
pRootOfTree->right = NULL;
return left;
}
pRootOfTree->right = right;
right->left = pRootOfTree;
return left;
}
TreeNode* findLastNode(TreeNode* head)
{
if(head==NULL)
{
return NULL;
}
auto cursor = head;
while(cursor->right!=NULL)
{
cursor = cursor->right;
}
return cursor;
}
}; 
京公网安备 11010502036488号