判断二叉树B是否是树A的子树

如下图所示,则认为树B是树A的子树。

代码如下:

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

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

    }

}
*/
public class Solution {
  //判断root2是否是root1的子树
    public boolean HasSubtree(TreeNode root1,TreeNode root2) {
        if(root1 ==null || root2==null) return false;

        if(isEqualTree(root1,root2)){
            return true;
        }else{
            return HasSubtree(root1.left,root2) || HasSubtree(root1.right,root2);
        }

    }
  //判断B是否是A的子树,并且从根节点开始,即A.val=B.val
    public boolean isEqualTree(TreeNode A,TreeNode B){
        if(B==null) return true;
        if(A==null) return false;

        if(A.val != B.val) return false;

        return isEqualTree(A.left,B.left) && isEqualTree(A.right,B.right);

    }

}
时间: 2024-11-25 04:25:52

判断二叉树B是否是树A的子树的相关文章

LeetCode:Symmetric Tree - 判断二叉树是否对称

1.题目名称 Symmetric Tree(判断二叉树是否对称) 2.题目地址 https://leetcode.com/problems/symmetric-tree/ 3.题目内容 英文:Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). 中文:给定一颗二叉树,检查它是否与自己的镜像是同一棵树(即围绕根节点对称). 4.解题方法 本题与题目"Same Tr

判断二叉树是否平衡

题目:输入一棵二叉树的根结点,判断该树是不是平衡二叉树.如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树. 注:这里不考虑该二叉树是否是二叉排序树 解决要点: 1.后序遍历二叉树: 2.递归. 核心算法: bool isBalanced(pTree pT,int *depth) { if(!pT)//参数判断 { *depth = 0; return true; } //后序遍历 int left,right; if(isBalanced(pT->lChild,&

编程算法 - 判断二叉树是不是平衡树 代码(C)

判断二叉树是不平衡树 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 输入一颗二叉树的根结点, 判断该树是不是平衡二叉树. 二叉平衡树: 任意结点的左右子树的深度相差不超过1. 使用后序遍历的方式, 并且保存左右子树的深度, 进行比较. 代码: /* * main.cpp * * Created on: 2014.6.12 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #include <std

56. 2种方法判断二叉树是不是平衡二叉树[is balanced tree]

[本文链接] http://www.cnblogs.com/hellogiser/p/is-balanced-tree.html [题目] 输入一棵二叉树的根结点,判断该树是不是平衡二叉树.如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树.例如下图中的二叉树就是一棵平衡二叉树: [分析] 之前的博文27.二元树的深度[BinaryTreeDepth]中介绍过如何求二叉树的深度.有了经验之后再解决这个问题,我们很容易就能想到思路. [方案1] 先判断左右子树是不是平衡的

判断二叉树是否平衡二叉树

题目 平衡二叉树的性质为:要么是一颗空树,要么任何一个节点的左右子树高度差的绝对值不超过1.给定一棵二叉树的头结点head,判断这棵二叉树是否为平衡二叉树. 难度:?? 基础理解 以下是个人认为对概念叙述较为详细的参考链接: 对平衡二叉树的理解:判断二叉树是否为平衡二叉树 对先序.中序.后序遍历的理解:二叉树的实现及先序.中序.后序遍历 设计 概要设计 设计一个初始树节点模型 接收节点变量并判断是否为平衡二叉树的方法 如何判断是否为平衡二叉树 包含对左右各分支节点的计数器,并以此相减,是否满足绝

&quot;Coding Interview Guide&quot; -- 判断二叉树是否为平衡二叉树

[题目] 平衡二叉树的性质为:要么是一棵空树,要么任何一个节点的左右子树高度差的绝对值不超过1.给定一棵二叉树的头节点head,判断这棵二叉树是否为平衡二叉树 [要求] 如果二叉树的节点数为N,要求时间复杂度为O(N) [分析] 平衡二叉树要么是一棵空树,要么任何一个节点的左右子树高度差的绝对值不超过1.平衡二叉树的任一子树也是平衡二叉树,所以如果二叉树的某一节点的左右子树高度差的绝对值超过了1,则该二叉树必定不是平衡二叉树.所以在递归求树高的过程中,计算当前节点的左右子树高度差的绝对值是不是超

判断二叉树是否为平衡树

平衡二叉树 给定一个二叉树,确定它是高度平衡的.对于这个问题,一棵高度平衡的二叉树的定义是:一棵二叉树中每个节点的两个子树的深度相差不会超过1. 先求左子树和右子树的最大深度,然后判断是否相差大于1,如果是,则不可能是,如果相差小于,继续递归调用判断左子树和右子树是否都是平衡二叉树. 代码实现 bool isBalanced(TreeNode *root) { // write your code here if(root == NULL) return true; int leftDepth

剑指offer38:输入一棵二叉树,求该树的深度

1 题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 2 思路和方法 深度优先搜索,每次得到左右子树当前最大路径,选择其中较大者并回溯.int len = left>right?left+1:right+1;    // 当前最大路径 3 C++ 核心代码 1 /* 2 struct TreeNode { 3 int val; 4 struct TreeNode *left; 5 struct TreeNode *

【bzoj3702】二叉树 权值线段树

神奇的解法 对于每个节点,建出权值线段树 每次查询右子树的权值线段树和左子树的权值线段树,左子树中比右子树小的有多少?右子树比左子树小的有多少?(分别对应不交换的逆序对和交换的逆序对) 将左子树和右子树的权值线段树合并 递归进行这个操作 感觉复杂度很不靠谱,于是想证明一下复杂度 最开始权值线段树共O(nlogn)个节点,最后共O(n)个节点 每次合并两棵树的每个节点都要访问一遍,所以每个节点好像是要访问O(dep[i])次? 但是,合并两棵树后,有些重复的节点被合并到了一起 所以好像有些节点又没