https://leetcode-cn.com/problems/subtree-of-another-tree/
思路
s 中包含和 t 具有相同结构和节点值的子树意味着s中存在一个节点s1,其大小和t相等,同时s1的左子树和t的左子树相同且s1的右子树和t的右子树相同。
/**
* 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) {
//这个就是先判断是否是树相等,
//然后判断root的左右子树,是否与subRoot相等
/*
首先判断节点值是否相等
如果相等,那么久判断2个树是否相等
如果不相等,那就遍历root的左右子树,然后找值相等,和其余节点相等
*/
//确认递归参数和返回值
if(root==null) return false;
if(subRoot==null) return true;
return compare(root,subRoot)||isSubtree(root.left,subRoot)||isSubtree(root.right,subRoot);
}
public boolean compare(TreeNode root, TreeNode subRoot){
//确认终止条件
//如果值相等,那么久
//首先排除错误的
if(root==null&&subRoot==null)
return true;
if(root==null||subRoot==null)
return false;
/**
两个都不为空,然后看值是否相等
*/
if(root.val!=subRoot.val)
return false;
/**
接下来,就是节点不都为空,值也相等的情况了
*/
boolean leftside=compare(root.left,subRoot.left);
boolean rightside=compare(root.right,subRoot.right);
boolean isSame = leftside && rightside;
return isSame;
}
}
相关题目
101. 对称二叉树
100.相同的树
https://blog.csdn.net/Subuprogrammer/article/details/105693709
https://blog.csdn.net/li975242487/article/details/91989406