ListNode* Merge(ListNode* p1,ListNode* p2)
{
if(p1==NULL)
return p2;
if(p2==NULL)
return p1;
if(p1->val<=p2->val)
{
p1->next = Merge(p1->next,p2);
return p1;
}
else
{
p2->next = Merge(p1,p2->next);
return p2;
}
}
ListNode* MergeKLists(vector<ListNode*> &lists)
{
if(lists.empty())
return NULL;
while(lists.size()>1)
{
lists.push_back(Merge(lists[0],lists[1]));
lists.erase(lists.begin());
lists.erase(lists.begin());
}
return lists.front();//return the first element of the vector
}
//将二叉树转化为链表
TreeNode* convert(TreeNode* root)
{
if(root==NULL)
return root;
TreeNode *pre = NULL;
con(root,pre);
while(root->left!=NULL)
{
root = root->left;
}
return root;
}
void con(TreeNode *cur,TreeNode* &pre)
{
if(cur==NULL)
return;
con(cur->left,pre);
cur->left = pre;
if(pre)
pre->righ = cur;
pre = cur;
con(cur->righ,pre);
}