572. 另一棵树的子树

Posted yangbocsu

tags:

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

572. 另一棵树的子树

一、题目

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

二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。


二、参考代码


/**
 * Definition for a binary tree node.
 * public class TreeNode 
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() 
 *     TreeNode(int val)  this.val = val; 
 *     TreeNode(int val, TreeNode left, TreeNode right) 
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     
 * 
 */
class Solution 
    public boolean isSubtree(TreeNode root, TreeNode subRoot) 
        if(root == null)
            return subRoot == null;
        
        
        // 判断以 root 为根的二叉树是否和 subRoot 相同
        if(isSameTree(root,subRoot))
            return true;
        

        // 去左右子树中判断是否有和 subRoot 相同的子树
        return isSubtree(root.left,subRoot) || isSubtree(root.right,subRoot);
        // 我们只需要找到一个就可以了
    



    public boolean isSameTree(TreeNode p, TreeNode q) 
    // 判断一对节点是否相同
    if(p == null && q == null)
        return true;
    

    if(p == null || q == null)
        return false;  // 两个不可能同时为空,因为前面一个if已经拦截了
    

    if(p.val != q.val)
        return false;
    
    // 判断其他节点是否相同
    return isSameTree(p.left,q.left) && isSameTree(p.right,q.right);
    

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

LeetCode-572. 另一棵树的子树

572. 另一棵树的子树-递归

LeetCode Algorithm 572. 另一棵树的子树

572. 另一棵树的子树

572. 另一棵树的子树

572. 另一棵树的子树