LeetCode Java刷题笔记—572. 另一棵树的子树

Posted 刘Java

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode Java刷题笔记—572. 另一棵树的子树相关的知识,希望对你有一定的参考价值。

572. 另一棵树的子树

给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。

简单难度。这道题和剑指 Offer 26. 树的子结构比较相似,采用双递归即可解决。三种情况,要么root等于subRoot,要么root的左子树等于subRoot,要么root的右子树等于subRoot。只要满足一个要求即可返回true,等价于前序遍历。

public boolean isSubtree(TreeNode root, TreeNode subRoot) 
    if (root == null) 
        return false;
    
    //要么root等于subRoot,要么root的左子树等于subRoot,要么root的右子树等于subRoot
    //只要满足一个要求即可返回true,等价于前序遍历。
    return dfs(root, subRoot) || isSubtree(root.left, subRoot) || isSubtree(root.right, subRoot);


private boolean dfs(TreeNode root, TreeNode subRoot) 
    if (root == null && subRoot == null) 
        return true;
    
    if (root == null || subRoot == null || root.val != subRoot.val) 
        return false;
    
    return dfs(root.left, subRoot.left) && dfs(root.right, subRoot.right);

以上是关于LeetCode Java刷题笔记—572. 另一棵树的子树的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode Java刷题笔记— 450. 删除二叉搜索树中的节点

LeetCode Java刷题笔记汇总

LeetCode Java刷题笔记—226. 翻转二叉树

LeetCode Java刷题笔记—206. 反转链表

LeetCode Java刷题笔记—328. 奇偶链表

LeetCode Java刷题笔记—143. 重排链表