572. Subtree of Another Tree

Given two non-empty binary trees s and t, check whether tree t has exactly the same structure and node values with a subtree of s. A subtree of s is a tree consists of a node in s and all of this node's descendants. The tree s could also be considered as a subtree of itself.

翻译:检查一棵树t是否是另外一棵树s的子树。

这题是很好的一题。有很多问题值得细细考虑的。

记s.val==t.val为命中,相反为未命中。
那么,
1.在命中的情况下是否存在只需要检查两侧的子树相等这一种情况,还是说存在查找?
2.在未命中的情况下是否意味着已经不匹配了呢,还是说通过下移t可以再次匹配?

这两种答案都是肯定的,而且只在t是根节点才成立。

/**
 * 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) {
          return isSub(s,t,t);
    }
    private boolean isSub(TreeNode s, TreeNode t,TreeNode tRoot)
    {
         if(s==null||t==null)
        {
            if(t==null&&s==null)
                return true;
            else 
                return false;
        }
        
        if(s.val==t.val)
        { 
            if(t==tRoot)
             return isSub(s.left,t.left,tRoot)&&isSub(s.right,t.right,tRoot)||
                isSub(s.left,t,tRoot)||isSub(s.right,t,tRoot);
            else
                return isSub(s.left,t.left,tRoot)&&isSub(s.right,t.right,tRoot);
        }
        else
        {
            if(t==tRoot)
                return  isSub(s.left,t,tRoot)||isSub(s.right,t,tRoot);
            else
                return false;
        }
    }
}

你可能感兴趣的:(572. Subtree of Another Tree)