找子树

68 阅读1分钟

LeetCode 572

原题链接

代码如下:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 * 
 * 借助isSame函数,判断当前s树某节点为根节点的子树是否存在t树一样的子树
 * 
 * Code by java
 */
class Solution {

	public boolean isSubtree(TreeNode s, TreeNode t) {
		if(s == null) return false;			//s树都为空,子树不存在
		if(isSame(s, t)) {
			return true;
		} else {
			return isSubtree(s.left, t) || isSubtree(s.right, t);	//s树的当前节点不符合,就让该节点的孩子作为新根节点
		}
	}
	
	public boolean isSame(TreeNode s, TreeNode t) {	//检验t数是否全部符合s的子树
		if(t == null && s == null) return true;		//两树都是空树,说明都遍历到尽头了,符合条件
		if(t == null || s == null) return false;	//两树有且仅有一棵是空树,不满足题意
		if(t.val != s.val) {
			return false;
		} else {
			return isSame(t.left, s.left) && isSame(t.right, s.right);
		}
	}
}