判断T2是否是T1的子树

基本模仿CC150上的思路,递归地在t1中寻找能与t2的根相同的节点,作为开始比较的开始点,然后递归的比较两个树是否相等。

boolean containsTree(TreeNode t1, TreeNode t2){
    if(t2==null)
        return true;

    return subTree(t1,t2);
}

boolean subTree(TreeNode t1, TreeNode t2){
    if(t1==null)
        return false;
    if(t1.val ==t2.val){
        if(matchTree(t1,t2))
            return true;
    }
    return subTree(t1.left,t2)||subTree(t1.right,t2);
}

boolean matchTree(TreeNode t1, TreeNode t2){
    if(t1==null&&t2==null)
        return true;
    if(t1==null||t2==null)
        return false;

    if(t1.val!=t2.val)
        return false;

    return matchTree(t1.left,t2.left)&&matchTree(t1.right,t2.right);
}
时间: 2024-08-24 17:18:56

判断T2是否是T1的子树的相关文章

CC150 需整理汇总

汉诺塔问题:P141 用两个stack设计一个队列 p142 结合上题,队列实现max操作,要求尽量提高效率.(编程之美) 找出二叉树中指定节点的下一个节点(中序后继),假定每个节点有父指针.p154 二叉树某两个节点的公共祖先.p155 判断T2是否是T1的子树.p159 打印二叉树节点数值总和等于某个给定节点的所有路径. p161 打印0-1之间double数字的二进制表示 p164 编写一个函数,确定需要改变几个位,才能将整数A转成整数B.p171 9.3 寻找magic index.p2

[算法专题] Binary Tree

1 Same Tree https://leetcode.com/problems/same-tree/ Given two binary trees, write a function to check if they are equal or not. Two binary trees are considered equal if they are structurally identical and the nodes have the same value. 分治的思想,如果root相

careercup-树与图 4.8

4.8 你有两棵非常大的二叉树:T1,有几百万个结点:T2,有几百个结点.设计一个算法,判断T2是否为T1的子树. 如果T1有这么一个结点n,其子树与T2一模一样,则T2是T1的子树.也就是说,从结点n处把树砍掉,得到的树与T2完全相同. C++实现代码: #include<iostream> #include<new> #include<cmath> using namespace std; //Definition for binary tree struct Tr

lintcode 容易题:Subtree 子树

题目: 子树 有两个不同大小的二叉树: T1 有上百万的节点: T2 有好几百的节点.请设计一种算法,判定 T2 是否为 T1的子树. 样例 下面的例子中 T2 是 T1 的子树: 1 3 / \ / T1 = 2 3 T2 = 4 / 4 下面的例子中 T2 不是 T1 的子树: 1 3 / \ T1 = 2 3 T2 = 4 / 4 注意 若 T1 中存在从节点 n 开始的子树与 T2 相同,我们称 T2 是 T1 的子树.也就是说,如果在 T1 节点 n 处将树砍断,砍断的部分将与 T2

lintcode.245 子树

子树 描述 笔记 数据 评测 有两个不同大小的二进制树: T1 有上百万的节点: T2 有好几百的节点.请设计一种算法,判定 T2 是否为 T1的子树. 注意事项 若 T1 中存在从节点 n 开始的子树与 T2 相同,我们称 T2 是 T1 的子树.也就是说,如果在 T1 节点 n 处将树砍断,砍断的部分将与 T2 完全相同. 您在真实的面试中是否遇到过这个题? Yes 哪家公司问你的这个题? Airbnb Amazon LinkedIn Cryptic Studios Dropbox Appl

245 子树

原题网址:https://www.lintcode.com/problem/subtree/description 描述 有两个不同大小的二叉树: T1 有上百万的节点: T2 有好几百的节点.请设计一种算法,判定 T2 是否为 T1的子树. 若 T1 中存在从节点 n 开始的子树与 T2 相同,我们称 T2 是 T1 的子树.也就是说,如果在 T1 节点 n 处将树砍断,砍断的部分将与 T2 完全相同. 您在真实的面试中是否遇到过这个题?  是 样例 下面的例子中 T2 是 T1 的子树: 1

子树(LintCode)

子树 有两个不同大小的二进制树: T1 有上百万的节点:T2 有好几百的节点.请设计一种算法,判定 T2 是否为 T1的子树. 样例 下面的例子中 T2 是 T1 的子树: 1 3 / \ / T1 = 2 3 T2 = 4 / 4 下面的例子中 T2 不是 T1 的子树: 1 3 / \ T1 = 2 3 T2 = 4 / 4 注意 若 T1 中存在从节点 n 开始的子树与 T2 相同,我们称 T2 是 T1 的子树.也就是说,如果在 T1 节点 n 处将树砍断,砍断的部分将与 T2 完全相同

LintCode 判断一个二叉树树是否是另一个二叉树的子书

有两个不同大小的二进制树: T1 有上百万的节点: T2 有好几百的节点.请设计一种算法,判定 T2 是否为 T1的子树. /** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this->val = val; * this->left = this->right = NULL; * } * } */ c

LintCode: isSubTree

Title: 有两个不同大小的二进制树: T1 有上百万的节点: T2 有好几百的节点.请设计一种算法,判定 T2 是否为 T1的子树 class Solution { public: /** * @param T1, T2: The roots of binary tree. * @return: True if T2 is a subtree of T1, or false. */ bool isSubtree(TreeNode *T1, TreeNode *T2) { bool resul