LeetCode572. 另一个树的子树

给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。

示例 1:
给定的树 s:

     3
    / \
   4   5
  / \
 1   2

给定的树 t:

   4 
  / \
 1   2

返回 true,因为 t 与 s 的一个子树拥有相同的结构和节点值。

示例 2:
给定的树 s:

     3
    / \
   4   5
  / \
 1   2
    /
   0

给定的树 t:

   4
  / \
 1   2

返回 false


思路:以s树的根结点开始遍历s树,每次取遍历到的结点作为另一棵子树的根节点与t树做比较,判断两棵树是否相同。若s树中含有子树与t树相同,则结果为true。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public boolean isSubtree(TreeNode s, TreeNode t) {
         if(s==null) {
	    	 return false;
	     }
	     if(isEqual(s,t)) {
	    	 return true;
	     }
	     
	     return isSubtree(s.left,t)||isSubtree(s.right,t);
    }
    public  boolean isEqual(TreeNode s,TreeNode t) {  //判断两棵树是否相同
		if(s==null&&t==null) {
			return true;
		}else if(s==null&&t!=null) {
			return false;
		}else if(s!=null&&t==null) {
			return false;
		}else {
			if(s.val!=t.val) {
				return false;
			}
		}
		
		return isEqual(s.left,t.left)&&isEqual(s.right,t.right);
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_40550726/article/details/80632392