[关闭]
@Lin-- 2020-02-24T13:59:14.000000Z 字数 939 阅读 361

mergeTrees

Leetcode


题意:给定两课二叉树,然后融合成一颗。要求相同位置结点的值相加,没有子树的分支合并。
解题思路:以第一棵树为输出目标树,用递归的方法:若左子树为空而第二棵树的左子树不空,便接上第二棵树的左子树,右子树同样如此。若都有,则递归进入。递归出口是叶子结点。

  1. /*
  2. *File:mergeTrees.c:
  3. *Author:0HP
  4. *Date:20200222
  5. *Purpose:to solve the problem in Leetcode
  6. *https://leetcode.com/problems/merge-two-binary-trees/
  7. */
  8. #include<stdio.h>
  9. #include<stdlib.h>
  10. struct TreeNode {
  11. int val;
  12. struct TreeNode *left;
  13. struct TreeNode *right;
  14. };
  15. void merge(struct TreeNode* t1,struct TreeNode* t2)
  16. {
  17. //当前节点求和
  18. t1->val=t1->val+t2->val;
  19. //叶子结点,求和返回
  20. if(t2->left==NULL&&t2->right==NULL)
  21. {return;}
  22. if(t1->left!=NULL&&t2->left!=NULL)
  23. {merge(&(*t1->left),&(*t2->left));}
  24. if(t1->right!=NULL&&t2->right!=NULL)
  25. {merge(&(*t1->right),&(*t2->right));}
  26. //t1无左子树,t2有左子树
  27. if(t1->left==NULL&&t2->left!=NULL)
  28. {
  29. t1->left=t2->left;
  30. }
  31. //t1无右子树,t2有右子树
  32. if(t1->right==NULL&&t2->right!=NULL)
  33. {
  34. t1->right=t2->right;
  35. }
  36. }
  37. struct TreeNode* mergeTrees(struct TreeNode* t1, struct TreeNode* t2){
  38. if(t1==NULL){return t2;}
  39. if(t2==NULL){return t1;}
  40. merge(&(*t1),&(*t2));
  41. return t1;
  42. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注