剑指offer_二叉树---树的子结构

简介: 剑指offer_二叉树---树的子结构

题目描述

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

解题思路

1,首先判断根节点是否相等

2,如果根节点相等,在接着判断其子结构是否相等

3,显然是两个递归,第一个用于发现相等的根节点,第二个用于判断子结构是否相等。

代码实现

/**
 * 
 */
package offerTest;
/**
 * <p>
 * Title:HasSubtree
 * </p>
 * <p>
 * Description:
 * </p>
 * 
 * @author 田茂林
 * @data 2017年8月20日 下午8:33:03
 */
public class HasSubtree {
public boolean HasSubtrees(TreeNode root1, TreeNode root2) {
        boolean result = false;
        if (root1 != null && root2 != null) {
            if (root1.val == root2.val) { // 根节点相同
                result = helper(root1, root2); 
                // 根节点相同,如果子结构也相同,返回true,否则仍然是false
            }
            if (!result) { //如果是false,继续从左右子树寻找相同的
                result = HasSubtrees(root1.left, root2)||HasSubtrees(root1.right, root2);
            }
        }
        return result;
    }
    // 判断子结构是否相同
    public boolean helper(TreeNode root1, TreeNode root2) {
        if (root2 == null)
            return true;
        // 如果2为空,则说明树2已结递归调用完了,都符合
        if (root1 == null)
            return false; // 如果2不为空,1为空则说明不符合
        if (root1.val != root2.val)
            return false;
        return helper(root1.left, root2.left) && helper(root1.right, root2.right);
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
    }
}


相关文章
【剑指offer】-树的子结构-17/67
【剑指offer】-树的子结构-17/67
|
6月前
二叉树基础oj练习(对称二叉树、翻转二叉树、另一棵树的子树二叉树的构建及遍历)
二叉树基础oj练习(对称二叉树、翻转二叉树、另一棵树的子树二叉树的构建及遍历)
41 0
|
6月前
|
Java BI 数据库管理
二叉树---前,中,后序遍历做题技巧(前,中,后,层次,线索二叉树)
二叉树---前,中,后序遍历做题技巧(前,中,后,层次,线索二叉树)
86 11
|
6月前
|
算法 DataX
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
|
算法 C语言 C++
【树】你真的会二叉树了嘛? --二叉树LeetCode专题Ⅲ
这题算是简单题,我们依然从最简单的情况来考虑。
63 0
|
算法 C语言 C++
【树】你真的会二叉树了嘛? --二叉树LeetCode专题
先来一题简单的题目练练手,之前有提到过,二叉树的前序遍历就是通过根左右的遍历方式来进行的,所以这题总体思路也是一样.不过要说明的是,这里采用了c语言,所以输出时需要自己创建一个动态数组,每次将访问到的val存入动态数组当中即可.
56 0
|
6月前
二叉树基础oj练习(单值二叉树、相同的树、二叉树的前序遍历)
二叉树基础oj练习(单值二叉树、相同的树、二叉树的前序遍历)
35 0
|
存储 算法 C语言
【树】你真的会二叉树了嘛? --二叉树LeetCode专题Ⅱ
这里有两种方法(深度优先搜索与广度优先搜索)其实也就是前序遍历与层序遍历,层序遍历这里简单提一下.与上面的大同小异就不过多赘述了:依旧是遍历出每一层最大的值,将其放入数组即可.
67 0
|
算法 C语言 C++
【树】你真的会二叉树了嘛? --二叉树LeetCode专题Ⅳ
本章依然是二叉树的刷题 忘记的朋友们可以去看看我的二叉树专题
57 0
剑指offer_二叉树---二叉树的深度
剑指offer_二叉树---二叉树的深度
67 0