LeetCode-树的子结构

297 阅读1分钟

算法记录

LeetCode 题目:

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


说明

一、题目

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

  输入:A = [1,2,3], B = [3,1]

  输出:false

二、分析

  • 两棵树需要相等,则对应的每个节点上的数据也要相等。
  • 也就是说我们遍历整棵树,如果当前节点的值和需要比较的 B 树的根节点值相等,我们就将此节点作为根的子树和 B 树进行判等。
  • 要注意判定树相等返回值结果,如果 B 树已经为空了,则没有必要进行下一步的判断(不管是否还有剩余的);但是如果 B 不空、 A 空了,那就直接 false
class Solution {
    public boolean equal(TreeNode A, TreeNode B) {
        if(B == null) return true;
        if(A == null) return false;
        return A.val == B.val && equal(A.left, B.left) && equal(A.right, B.right);
    }

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

总结

熟悉两棵树相等的递归实现。