剑指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月前
二叉树中的深度搜索
二叉树中的深度搜索
|
7月前
|
Java BI 数据库管理
二叉树---前,中,后序遍历做题技巧(前,中,后,层次,线索二叉树)
二叉树---前,中,后序遍历做题技巧(前,中,后,层次,线索二叉树)
103 11
|
7月前
|
存储 算法
哈夫曼树(赫夫曼树、最优树)详解
哈夫曼树(赫夫曼树、最优树)详解
168 0
|
算法 C语言 C++
【树】你真的会二叉树了嘛? --二叉树LeetCode专题Ⅲ
这题算是简单题,我们依然从最简单的情况来考虑。
69 0
|
存储 算法 C语言
【树】你真的会二叉树了嘛? --二叉树LeetCode专题Ⅱ
这里有两种方法(深度优先搜索与广度优先搜索)其实也就是前序遍历与层序遍历,层序遍历这里简单提一下.与上面的大同小异就不过多赘述了:依旧是遍历出每一层最大的值,将其放入数组即可.
74 0
剑指offer_二叉树---二叉树的深度
剑指offer_二叉树---二叉树的深度
74 0
剑指offer 25. 树的子结构
剑指offer 25. 树的子结构
66 0
树的子结构(剑指offer 26)Java先序遍历+子结构判断
输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值。
111 0
树的子结构(剑指offer 26)Java先序遍历+子结构判断
代码随想录刷题|LeetCode 104.二叉树的最大深度 559.n叉树的最大深度 111.二叉树的最小深度 222.完全二叉树的节点个数(下)
代码随想录刷题|LeetCode 104.二叉树的最大深度 559.n叉树的最大深度 111.二叉树的最小深度 222.完全二叉树的节点个数