算法

LeetCode题解:一棵树是否是另一棵树的子树

2022-06-04  本文已影响0人  搬码人

题目描述

给你两棵二叉树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) {
        return dfs(root,subRoot);
    }
    public boolean dfs(TreeNode root,TreeNode subRoot){
        if(root==null){
            return false;
        }
        return check(root,subRoot)||dfs(root.left,subRoot)||dfs(root.right,subRoot);
    }
    public boolean check(TreeNode root,TreeNode subRoot){
        if(root==null&&subRoot==null){
            return true;
        }
        if(root==null||subRoot==null||root.val!=subRoot.val){
            return false;
        }
        return check(root.left,subRoot.left)&&check(root.right,subRoot.right);
    }
}
上一篇 下一篇

猜你喜欢

热点阅读