代码的鲁棒性:树的子结构

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

代码实现方式一:

/**
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 root1,TreeNode root2) {
        if (root1 == null || root2 == null) {
            return false;
        }
        return isSubTree(root1, root2) || HasSubtree(root1.left, root2)
                || HasSubtree(root1.right, root2);
    }

    public boolean isSubTree(TreeNode root1, TreeNode root2) {
        if (root2 == null)
            return true;
        if (root1 == null)
            return false;
        if (root1.val == root2.val) {
            return isSubTree(root1.left, root2.left)
                    && isSubTree(root1.right, root2.right);
        } else
            return false;    }
}

代码实现方式二:

/**
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 root1,TreeNode root2) {
        boolean result = false;
        if (root1 != null && root2 != null) {
            if (root1.val == root2.val) {
                result = isSubTree(root1, root2);
            }
            if (!result) {
                result = HasSubtree(root1.left, root2);
            }
            if (!result) {
                result = HasSubtree(root1.right, root2);
            }
        }
        return result;
    }

    public boolean isSubTree(TreeNode root1, TreeNode root2) {
        if (root1 == null && root2 != null)
            return false;
        if (root2 == null) {
            return true;
        }
        if (root1.val != root2.val) {
            return false;
        }
        return isSubTree(root1.left, root2.left)
                && isSubTree(root1.right, root2.right);
    }
}
时间: 2024-10-07 06:29:17

代码的鲁棒性:树的子结构的相关文章

剑指offer 17. 代码的鲁棒性 树的子结构

题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 解题思路:先比较数A的根结点是否等于B的根结点, 如果不同,则比较A的左结点是否跟B的根结点相同    如果不同·,则比较A的右结点是否跟B的根结点相同 一直这样比下去,直达遍历完整两棵树,看是否A包含B 具体代码实现如下: public class HasSubtree {public boolean HasSubtree(TreeNode root1,TreeNode root2) { bo

剑指offer——树的子结构 (JAVA代码)

版权声明:本文为博主原创文章,未经博主允许不得转载. 题目描述: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构). 解题思路: 首先看牛客网给出的测试用例: 一般对于树的操作不像链表一样,操作更复杂,如果使用循环遍历的话,对于非完全二叉树规律难寻,一般通用的方法就是使用递归求解,本题也不例外,同样使用递归求解,求解的大体思路是首先判断B的根节点和A的根节点是否相同(这里的相同是指节点的值相同并且左右子节点相同),如果相同比较他们的左右子节点,这一步骤是

剑指Offer对答如流系列 - 树的子结构

面试题26:树的子结构 问题描述 输入两棵二叉树A和B,判断B是不是A的子结构.二叉树的定义如下: public class TreeNode{ double val; TreeNode left = null; TreeNode right =null; public TreeNode(int val) { this.val=val; } } 比如下面的 B是A的子结构 问题分析 看了看<剑指Offer>高质量代码章节的面试题,发现难度都不高,但是没有分析好边界条件亦或是想当然就是容易出错,

【剑指offer】树的子结构

转载请注明出处:http://blog.csdn.net/ns_code/article/details/25907685 剑指offer第18题,九度OJ上测试通过! 题目描述: 输入两颗二叉树A,B,判断B是不是A的子结构. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行一个整数n,m(1<=n<=1000,1<=m<=1000):n代表将要输入的二叉树A的节点个数(节点从1开始计数),m代表将要输入的二叉树B的节点个数(节点从1开始计数).

剑指offer之树的子结构

题目: 树的子结构 链接: https://www.nowcoder.com/practice/6e196c44c7004d15b1610b9afca8bd88?tpId=13&tqId=11170&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 题目描述: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 思路: 分为两步: 第一步:

《剑指Offer》题目:树的子结构

题目描述:树的子结构 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 题目分析:此题可以拆成两题,1.在二叉树中查找是否存在某个结点:2.判断两个二叉树是否有相同的结构 Java代码: class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } public class

树的子结构-剑指Offer

树的子结构 题目描述 输入两颗二叉树A,B,判断B是不是A的子结构. 思路 分两步来实现 先判断Tree1里的节点有没有和Tree2的根节点相同值得节点,递归的判断,若有,侧判断第二步,否则,返回false 从这个有相同值的节点开始判断,递归的左右对应的判断子树是否相等,注意空指针的情况 注意:在编写遍历树的代码时一定要高度警惕,在每一处要访问地址的时候都要问问自己这个地址有没有可能是NULL,如果是该怎么处理.(为了确保自己代码的完整正确,写完代码后要多用几个测试用例检验自己的程序) 代码 /

剑指OFFER之树的子结构(九度OJ1520)

题目描述: 输入两颗二叉树A,B,判断B是不是A的子结构. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行一个整数n,m(1<=n<=1000,1<=m<=1000):n代表将要输入的二叉树A的节点个数(节点从1开始计数),m代表将要输入的二叉树B的节点个数(节点从1开始计数).接下来一行有n个数,每个数代表A树中第i个元素的数值,接下来有n行,第一个数Ki代表第i个节点的子孩子个数,接下来有Ki个树,代表节点i子孩子节点标号.接下来m+1行,与

java基础编程——树的子结构

题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 题目代码 /** * 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) * Created by YuKai Fan on 2018/9/3. */ public class HasSubTree { public static void main(String[] args) { TreeNode a = new TreeNode(2); a.left