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. 另一棵树的子树的主要内容,如果未能解决你的问题,请参考以下文章