剑指 Offer 26 树的子结构

2022-01-11  本文已影响0人  itbird01
题目.png

题意:输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)
B是A的子结构, 即 A中有出现和B相同的结构和节点值。

解题思路

解法1:
1.分析题意,存在三种情况,B是A的左子树的子树,B是A的右子树的子树,B是A的子树
2.由上分析,可知重点在于,如何判定B为A的子树:在A中遍历,如果找到a.val==b.val,此时开始遍历B,如果B遍历到叶子节点,则为A的子树

解题遇到的问题

后续需要总结学习的知识点

##解法1
class Solution {
    public boolean isSubStructure(TreeNode A, TreeNode B) {
        if (A == null || B == null) {
            return false;
        }

        return dfs(A, B) || isSubStructure(A.left, B)
                || isSubStructure(A.right, B);
    }

    private boolean dfs(TreeNode a, TreeNode b) {
        if (b == null) {
            return true;
        }

        if (a == null) {
            return false;
        }

        return a.val == b.val && dfs(a.left, b.left) && dfs(a.right, b.right);
    }

}
上一篇 下一篇

猜你喜欢

热点阅读