树的子结构

题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

lintcode 的这道题考虑不周全,未考虑到 B 可能存在于 A 内部的情况,即
样例

这种条件下用 lintcode 代码会报错

/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    public boolean HasSubtree(TreeNode T1,TreeNode T2) {
        if (T1 == null || T2 == null) {
            return false;
        }

        boolean result = false;
        if (T1.val == T2.val) {
            result = isSubTree(T1, T2);
        }
        if (!result) {
            result = HasSubtree(T1.left, T2) || HasSubtree(T1.right, T2);
        }
        
        return result;
    }
    
    // isSubTree 主要用来考虑两棵树根结点相等时, 
    // T2 是否在 T1 内部,可能存在 T2 的叶子结点是 T1 的内部结点
    private boolean isSubTree(TreeNode T1, TreeNode T2) {
        if (T1 == null && T2 != null) {
            return false;
        }
        if (T2 == null) {
            return true;
        }
        if (T1.val != T2.val) {
            return false;
        }
        
        return isSubTree(T1.left, T2.left) && isSubTree(T1.right, T2.right);
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 前面曾经做过根据中序和...
    鸿雁长飞光不度阅读 861评论 5 3
  • 树的子结构 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) ...
    echoVic阅读 608评论 0 1
  • 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 代码实现 主...
    _minimal阅读 2,126评论 0 0
  • 题目:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)思路:刚开始考虑将...
    Hammy阅读 141评论 0 0
  • 题目:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 代码: isSu...
    qming_c阅读 322评论 0 0