LeetCode 572 题解
给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。
思路
思路先通过后序遍历遍历二叉树,将当前节点值与t树的头节点值进行比较如果相同则进行递归比较s的子树与t是否相同,如果相同返回true,如果不同则继续遍历二叉树
代码实现
public boolean isSubtree(TreeNode s, TreeNode t) { if(s == null && t !=null) return false; // 判断一棵树 是不是另外一棵树的子树,有三种情况 return isSubtree(s.left, t) || isSubtree(s.right, t) || isSubtreeWithRoot(s, t); } private boolean isSubtreeWithRoot(TreeNode s, TreeNode t) { if(s == null && t == null) return true; if(s == null && t != null) return false; if(s != null && t == null) return false; if(s.val != t.val) return false; return isSubtreeWithRoot(s.left, t.left) && isSubtreeWithRoot(s.right, t.right) ; }