剑指 Offer 26. 树的子结构

    技术2022-07-16  38

    方法一

    算法思想:

    第一:isSubStr(A,B)  遍历找节点,分成三部分,根rec,是否是左isSub(A.left,B),是否是右isSub(A.right,B);

    第二:rec(A,B) 判定A包含B,先根,再对应的左右判断,所有返回true才是匹配成功。

    A根节点为A,B根节点为B 时间复杂度:O(MN) 空间复杂度:O(M) 边界条件:各种为空 补充知识:树基本都是递归,根左右分开判断,各种连接符返回值秀一脸。

    /**

     * Definition for a binary tree node.

     * public class TreeNode {

     *     int val;

     *     TreeNode left;

     *     TreeNode right;

     *     TreeNode(int x) { val = x; }

     * }

     */

    class Solution {

        public boolean isSubStructure(TreeNode A, TreeNode B) {

            return (A!=null&&B!=null)&&(rec(A,B)||isSubStructure(A.left,B)||isSubStructure(A.right,B));  //此处注意括号逻辑连接符,以及判空原因

     

        }

            public boolean rec(TreeNode A, TreeNode B){

                if(B==null) return true;           //正路

                if(A==null||A.val!=B.val) return false; //堵路

                return rec(A.left,B.left)&&rec(A.right,B.right); 

     

            }

    }

    Processed: 0.011, SQL: 9