lintcode,子树

来源:互联网 发布:淘宝上的gucci是真的吗 编辑:程序博客网 时间:2024/06/10 13:09

有两个不同大小的二进制树: T1 有上百万的节点; T2 有好几百的节点。请设计一种算法,判定 T2 是否为 T1的子树。
样例
下面的例子中 T2 是 T1 的子树:
1 3
/ \ /
T1 = 2 3 T2 = 4
/
4
下面的例子中 T2 不是 T1 的子树:
1 3
/ \ \
T1 = 2 3 T2 = 4
/
4

一刷没ac

解题思路:递归实现,要注意细节,比如T2为空则true,T1为空就false,后面就是判断左子树右子树或者两棵树是否相同的比较了。

/** * 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) {        if(T2 == null) return true;        if(T1 == null) return false;        return isSubtree(T1.left, T2)||isSubtree(T1.right, T2)||dfs(T1, T2);    }    public boolean dfs(TreeNode T1, TreeNode T2){        if(T1 == null && T2 == null) return true;        if(T1 == null || T2 == null) return false;        if(T1.val == T2.val) return dfs(T1.left, T2.left) && dfs(T1.right, T2.right);        return false;    }}
0 0
原创粉丝点击