题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
//本题的解题思路是先确定两条链表头结点的大小,把小的放到第三条链表里面 通过递归方式,
//每一次确定最小的那个数,然后挪动链表
if(pHead1 == nullptr)return pHead2;
else if(pHead2 == nullptr)return pHead1;
ListNode* pMergeHead = nullptr;
if(pHead1 -> val < pHead2 -> val){
pMergeHead = pHead1;
pMergeHead -> next = Merge(pHead1->next,pHead2);
}
else{
pMergeHead = pHead2;
pMergeHead -> next = Merge(pHead2->next,pHead1);
}
return pMergeHead;
}
题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
bool DoesTree1HasTree2(TreeNode* pRoot1, TreeNode* pRoot2){
if(pRoot2 == nullptr)return true;
if(pRoot1 == nullptr)return false;
if(!(pRoot1->val == pRoot2->val))return false;
//一个个的比较
return DoesTree1HasTree2(pRoot1 -> left,pRoot2 -> left) && DoesTree1HasTree2(pRoot1 -> right,pRoot2 -> right);
}
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
{
bool result = false;
//if(pRoot1 == nullptr || pRoot2 == nullptr)return false;
if(pRoot1 != nullptr && pRoot2 != nullptr){
if((pRoot1 -> val) == (pRoot2 -> val)){//这个if条件最多只会被执行一次
result = DoesTree1HasTree2(pRoot1,pRoot2);
}
if(!result){//如果前面没有匹配到 则应该逐级递归树1
result = HasSubtree(pRoot1 -> left,pRoot2);
}
if(!result){
result = HasSubtree(pRoot1 -> right,pRoot2);
}
}
return result;
}