剑指 Offer 26. 树的子结构

剑指 Offer 26. 树的子结构

 

 

解题复盘

这题已经做过了,但是今天再重做时仍然没做出来,是不是年纪大了脑袋不灵光。。。。

见到此题,与树相关,思路当然首先要想到回溯!但是做题时只注意到回溯的终止条件,对于何时开始回溯并未仔细考虑。B为A的子树,B的根节点可能在A树的任何一个地方,所以在判断是否为子树的回溯的基础上还需要对树进行遍历,找到根节点相同的地方开始进行回溯遍历。

 

解题思路

本题的实质也是由两块组成:1. 如何在原树中找到子树的根节点 2. 如何判断后续节点与原树相同

  1. 遍历原树,使用先序遍历,先判断该节点,再判断左右子节点。

  2. recur 终止条件:fasle:原树已空而子树未空、值不相等 true:子树已空

class Solution {
    public boolean isSubStructure(TreeNode A, TreeNode B) {        
        return (A != null && B != null) && (recur(A, B) || isSubStructure(A.left, B) || isSubStructure(A.right, B));
    }
    boolean recur(TreeNode A, TreeNode B) {
        if(B == null) return true;
        if(A == null || A.val != B.val) return false;
        return recur(A.left, B.left) && recur(A.right, B.right);
    }
}

  

 

 

上一篇:力扣算法学习day15-1


下一篇:110. 平衡二叉树(简单 树 深度优先搜索 二叉树 递归)