二叉树oj ----> 另一棵树的子树

一时失言乱红尘 2023-10-02 13:54 95阅读 0赞

题目内容:

watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAb2hhbmHvvIE_size_20_color_FFFFFF_t_70_g_se_x_16

解题思路:

针对这道题最好的方法就是,化整为零,逐一解决,最终归为一个问题的判断(这两棵树是否相同)

  • 首先写一个方法,用来判断两棵树是否相同,即是否为同一棵树
  • 在原方法当中,我们将是否都为空,还是一个为空一个不为空,判断完成后,在进行新的两棵树是否为同一棵树的判断
  • 如果不是,就进行递归,在root的左子树先寻找,如果能找到,则说明就是,反之,在右子树寻找,如果能找到,那就说明是成立的

解题代码:

  1. class Solution {
  2. public boolean isSameTree(TreeNode p, TreeNode q) {
  3. //如果两棵树都为空
  4. if(p == null && q == null){
  5. return true;
  6. }
  7. //如果两棵树,一棵树为空,另一棵树不为空
  8. if ((p != null && q == null) || (q != null && p == null)){
  9. return false;
  10. }
  11. //如果两棵树都不为空
  12. return p.val == q.val &&
  13. isSameTree(p.left,q.left) &&
  14. isSameTree(p.right,q.right);
  15. }
  16. public boolean isSubtree(TreeNode root, TreeNode subRoot) {
  17. //如果两棵树都为空树
  18. if(root == null && subRoot == null){
  19. return true;
  20. }
  21. //如果两棵树,Root不为空,subRoot为空则为true
  22. if(root != null && subRoot == null){
  23. return true;
  24. }
  25. //如果两棵树,Root为空,subRoot不为空则为false
  26. if(root == null && subRoot != null){
  27. return false;
  28. }
  29. //两棵树不为空
  30. //检测是否为同一棵树
  31. if(isSameTree(root,subRoot)){
  32. return true;
  33. }
  34. //两棵树不为同一棵树
  35. return isSubtree(root.left,subRoot) ||
  36. isSubtree(root.right,subRoot);
  37. }
  38. }

发表评论

表情:
评论列表 (有 0 条评论,95人围观)

还没有评论,来说两句吧...

相关阅读