剑指Offer-Java-树的子结构

简介: 剑指Offer-Java-树的子结构

树的子结构


题目:


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


代码:

package com.sjsq.test;
/**
 * @author shuijianshiqing
 * @date 2020/5/19 20:47
 */
/**
 * 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
 */
public class Solution {
    public boolean HasSubtree(TreeNode root1,TreeNode root2){
        boolean result = false;
        if(root1 != null && root2 != null){
            if(root1.val == root2.val){
                result = HasTree(root1,root2);
            }
            if(!result){
                result = HasTree(root1.left,root2);
            }
            if(!result){
                result = HasTree(root1.right,root2);
            }
        }
        return result;
    }
    public boolean HasTree(TreeNode root1,TreeNode root2){
        //首先是递归结束条件,递归到B没有子节点时,说明比较完了,B是A子结构
        //遍历到A没有子节点时,说明还有B的子孙节点没有比较,此时B不是A的结构
        //这两句的顺序不能颠倒,因为先判断的B树是否还有节点。
        if(root2 == null){
            return true;
        }
        if(root1 == null){
            return false;
        }
        if(root1.val != root2.val){
            return false;
        }
        //到这里说明传入的两颗树的根节点值相同
        return HasTree(root1.left,root2.left) && HasTree(root1.right,root2.right);
    }
}
相关文章
|
5月前
|
存储 算法 Java
Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。
【6月更文挑战第21天】Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。二叉树遍历通过访问根、左、右子节点实现。DFS采用递归遍历图的节点,而BFS利用队列按层次访问。以下是简化的代码片段:[Java代码略]
45 4
|
6月前
|
Java
Tree Traversals Again(Java语言)(先序和中序创建二叉树)(遍历树)
Tree Traversals Again(Java语言)(先序和中序创建二叉树)(遍历树)
40 4
|
3月前
|
存储 Java
|
3月前
|
存储 Java
|
5月前
|
存储 安全 Java
深入解析Java HashMap的高性能扩容机制与树化优化
深入解析Java HashMap的高性能扩容机制与树化优化
145 1
|
5月前
|
Java
JAVA中的AVL树实现
JAVA中的AVL树实现
57 1
|
5月前
|
Java
赫夫曼树(java)
赫夫曼树(java)
|
5月前
|
Java
剑指offer_3_前n个数字二进制形式中1的个数(java)
剑指offer_3_前n个数字二进制形式中1的个数(java)
|
5月前
|
Java
剑指offer_2_二进制加法(java)
剑指offer_2_二进制加法(java)
|
5月前
|
Java
剑指offer_1_整数除法(java)
剑指offer_1_整数除法(java)