2022-6-29 剑指offer-树-递归

输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)

B是A的子结构, 即 A中有出现和B相同的结构和节点值。

例如:
给定的树 A:

     3
    / \
   4   5
  / \
 1   2

给定的树 B:

   4 
  /
 1

返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。

 1 /**
 2  * Definition for a binary tree node.
 3  * public class TreeNode {
 4  *     int val;
 5  *     TreeNode left;
 6  *     TreeNode right;
 7  *     TreeNode(int x) { val = x; }
 8  * }
 9  */
10 class Solution {
11     public boolean isSubStructure(TreeNode A, TreeNode B) {
12         if (B==null||A==null) return false;
13         if (isSameTree(A,B)||isSubStructure(A.left,B)||isSubStructure(A.right,B)) {
14             return true;
15         }
16         return false;
17     }
18 
19 
20     public boolean isSameTree(TreeNode a,TreeNode b){
21         if (a==null&&b!=null) return false;
22         if (b==null) return true;
23         if (a.val!=b.val) return false;
24         if (isSameTree(a.left,b.left)&&isSameTree(a.right,b.right)) return true;
25         return false;
26     }
27 }

思路:注意是子结构而不是完全相同的结构,定义一个递归函数判断两个数是否为包含关系。总函数递归判断当前节点,左右子树分别是否为包含b的树。

posted on 2022-06-29 13:35  阿ming  阅读(18)  评论(0编辑  收藏  举报

导航