[lincode easy]subtree

Subtree

You have two every large binary trees: T1, with millions of nodes, and T2, with hundreds of nodes. Create an algorithm to decide if T2 is a subtree of T1.

Example

T2 is a subtree of T1 in the following case:

       1                3
      / \              / 
T1 = 2   3      T2 =  4
        /
       4

T2 isn't a subtree of T1 in the following case:

       1               3
      / \               \
T1 = 2   3       T2 =    4
        /
       4
Note

A tree T2 is a subtree of T1 if there exists a node n in T1 such that the subtree of n is identical to T2. That is, if you cut off the tree at node n, the two trees would be identical.

 

 

/**
 * Definition of TreeNode:
 * public class TreeNode {
 *     public int val;
 *     public TreeNode left, right;
 *     public TreeNode(int val) {
 *         this.val = val;
 *         this.left = this.right = null;
 *     }
 * }
 */
public class Solution {
    /**
     * @param T1, T2: The roots of binary tree.
     * @return: True if T2 is a subtree of T1, or false.
     */
    public boolean isSubtree(TreeNode T1, TreeNode T2) {
        // write your code here
        boolean result=false;
        if(T1==null && T2==null) return true;
        if(T1==null) return false;
        if(T2==null) return true;

        if(helper(T1,T2))
         return true;
        
        if(isSubtree(T1.left,T2) || isSubtree(T1.right,T2))
            return true;
    
        else
        return false;
        
    }
    
    public boolean helper(TreeNode p,TreeNode q)
    {
        if(p==null && q==null) return true;
        if(p!=null &&  q!=null && p.val==q.val)
        {
        
           return helper(p.left,q.left) && helper(p.right,q.right);
        }
        return false;
    
    }
}

 

posted on 2015-12-01 03:52  一心一念  阅读(202)  评论(0编辑  收藏  举报

导航