剑指 Offer 26. 树的子结构

image.png

递归

执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户 内存消耗:40.3 MB, 在所有 Java 提交中击败了29.98%的用户

  1. public class Solution {
  2. public boolean isSubStructure(TreeNode A, TreeNode B) {
  3. return (A != null && B != null) && (
  4. recursion(A, B) // A 与 B 的树根进行判断
  5. || isSubStructure(A.left, B) // A 的左子树与 B 进行对比
  6. || isSubStructure(A.right, B) // A 的右子树与 B 进行对比
  7. );
  8. }
  9. // 此方法用于判断 B 是否为 A 的子树
  10. public boolean recursion(TreeNode A, TreeNode B) {
  11. // 如果 B 为空,说明递归到 B 的底了,B 为 A 的子树
  12. if (B == null) return true;
  13. // 如果 A 为空,此时 B 不为空,但是 A 为空,说明 B 不是 A 的子树
  14. if (A == null) return false;
  15. // 如果节点的值相等,则递归判断左右子树
  16. if (A.val == B.val) {
  17. return recursion(A.left, B.left) && recursion(A.right, B.right);
  18. } else {
  19. return false;
  20. }
  21. }
  22. }