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

题目描述

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

思路:

 1、当Tree1和Tree2都不为零的时候,才进行比较。否则直接返回false

 2、

2.1如果找到了对应Tree2的根节点的点,
以这个根节点为为起点判断是否包含Tree2

2.2
如果找不到,那么就再去root的左孩子当作起点,去判断时候包含Tree22.3
如果还找不到,那么就再去root的右孩子当作起点,去判断时候包含Tree2
 1 public class Solution {
 2     public static boolean HasSubtree(TreeNode root1, TreeNode root2) {
 3         boolean result = false;
 4         //当Tree1和Tree2都不为零的时候,才进行比较。否则直接返回false
 5         if (root2 != null && root1 != null) {
 6             //如果找到了对应Tree2的根节点的点
 7             if(root1.val == root2.val){
 8                 //以这个根节点为为起点判断是否包含Tree2
 9                 result = doesTree1HaveTree2(root1,root2);
10             }
11             //如果找不到,那么就再去root的左孩子当作起点,去判断时候包含Tree2
12             if (!result) {
13                 result = HasSubtree(root1.left,root2);
14             }
15              
16             //如果还找不到,那么就再去root的右孩子当作起点,去判断时候包含Tree2
17             if (!result) {
18                 result = HasSubtree(root1.right,root2);
19                }
20             }
21             //返回结果
22         return result;
23     }
24  
25     public static boolean doesTree1HaveTree2(TreeNode node1, TreeNode node2) {
26         //如果Tree2已经遍历完了都能对应的上,返回true
27         if (node2 == null) {
28             return true;
29         }
30         //如果Tree2还没有遍历完,Tree1却遍历完了。返回false
31         if (node1 == null) {
32             return false;
33         }
34         //如果其中有一个点没有对应上,返回false
35         if (node1.val != node2.val) {  
36                 return false;
37         }
38          
39         //如果根节点对应的上,那么就分别去子节点里面匹配
40         return doesTree1HaveTree2(node1.left,node2.left) && doesTree1HaveTree2(node1.right,node2.right);
41     }
42 }

时间: 2024-10-16 23:06:29

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

比较两棵二叉树--(比较两棵二叉树是否相同/判断一棵二叉树是否是另一棵二叉树的子树)

一,问题介绍 本文章讨论两个问题: ①如何判断两棵二叉树的结构是一样的.对应的每个结点都有着相同的值.--即判断两棵二叉树是一样的 ②给定两棵二叉树,如何判断一棵二叉树是另一棵二叉树的子结构 ③给定两棵二叉树,如何判断一棵二叉树是另一棵二叉树的子树 注意,子结点与子树有那么一点点不同. 上面的二叉树B 是二叉树A 的子结构,但是不能说是二叉树A的子树.但是二叉树C 是 二叉树A的子树. 二,问题分析 1,如何判断两棵二叉树的结构是一样的.且对应的每个结点都有着相同的值. 对于①如何判断两棵二叉树

输入两棵二叉树A和B,判断B是不是A的子结构。

public class Solution { private class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } //HasSubtree主要是判断树root1中是否含有root2节点 public boolean HasSubtree(TreeNode root1,TreeNode root2) { i

输入两棵二叉树A,B,判断B是不是A的子结构(c++实现)

#include <iostream> #include <cstdio> #include <stdio.h> #include <string> #include <queue> #include <stack> using namespace std; class Node{ public : char data; struct Node *lchild,*rchild; }; class BiTree{ public: Nod

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

public class Solution { public boolean HasSubtree(TreeNode root1,TreeNode root2) { if(root2==null){ return false; } if(root1==null){ return false; } return isSubtree(root1,root2)||isSubtree(root1.left,root2)||isSubtree(root1.right,root2); } public st

剑指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 *

020给定两个二叉树T1,T2判断T1是否是T2的子树(keep it up)

给定两个二叉树T1,T2判断T1是否是T2的子树 首先在T2中查找T1的根节点,如果找不到, 则T1不是T2的子树,如果能找到,我们可以 遍历T1,检查T1的每个结点是否对应的存在T2 中. 代码: struct TreeNode { int data; TreeNode* leftChild; TreeNode* rightChild; }; bool isExited(const TreeNode* vRoot1, const TreeNode *vRoot2, TreeNode* vRes

C++算法之 求二叉树中叶子节点的个数 与 判断两棵二叉树是否结构相同

//叶子节点的个数 /* (1)如果二叉树为空,返回0 (2)如果二叉树不为空且左右子树为空,返回1 (3)如果二叉树不为空,且左右子树不同时为空,返回左子树中叶子节点个数加上右子树中叶子节点个数 */ int GetLeafNodeNum(BTree* root) { if(root == NULL) return 0; if(root->m_pLeft == NULL && root->m_pRight == NULL) return 1; int LeafNumOfLef

判断两棵二叉树是否相等

算法思想:先序遍历,递归实现.先判断根节点是否相等,然后在判断左右子树是否相等.代码如下 1 //二叉树节点结构体 2 struct BinaryNode 3 { 4 int data; 5 BinaryNode * lc; 6 BinaryNode * rc; 7 }*BTree; 8 9 //判断二叉树是否相等的函数 10 11 bool isEqual(BTree T1,BTree T2) 12 { 13 if(T1 == NULL && T2 == NULL) 14 return

输入两个二叉树A与B,判断B是否是A的子结构

思路:第一步判断a的值是否和b的根结点相等不,不相等比较a的左子树和b进行比较,不同在判断a的右子树与b进行比较,重复第一步迭代.第二步,当找到a的子树和b的根结点相同时,比较该子树的左右结点 是否和b的左右结点相同. //是否包含 public static boolean hasSubTree(TreeNote root1,TreeNote root2){ boolean result=false; if(root1!=null&&root2!=null){ if(root1.getV