《剑指Offer——树的子结构》代码
Posted 穿迷彩服的鲨鱼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《剑指Offer——树的子结构》代码相关的知识,希望对你有一定的参考价值。
前言
//==================================================================
// 《剑指Offer——树的子结构》代码
// 题目:输入两棵二叉树A和B,判断B是不是A的子结构。
//==================================================================
一、示例
/************************************************************************
输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)
B是A的子结构, 即 A中有出现和B相同的结构和节点值。
例如:
给定的树 A:
3
/ \\
4 5
/ \\
1 2
给定的树 B:
4
/
1
返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。
示例 1:
输入:A = [1,2,3], B = [3,1]
输出:false
示例 2:
输入:A = [3,4,5,1,2], B = [4,1]
输出:true
*************************************************************************/
二、代码解析
1.新建.cpp文件
代码如下(示例):
//==================================================================
// 《剑指Offer——树的子结构》代码
// 题目:输入两棵二叉树A和B,判断B是不是A的子结构。
//==================================================================
#include<iostream>
using namespace std;
struct TreeNode
{
int val;
TreeNode* left;
TreeNode* right;
};
/************************************************************************
输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)
B是A的子结构, 即 A中有出现和B相同的结构和节点值。
例如:
给定的树 A:
3
/ \\
4 5
/ \\
1 2
给定的树 B:
4
/
1
返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。
示例 1:
输入:A = [1,2,3], B = [3,1]
输出:false
示例 2:
输入:A = [3,4,5,1,2], B = [4,1]
输出:true
*************************************************************************/
bool Equal(double num1, double num2)
{
if ((num1 - num2 > -0.0000001) && (num1 - num2 < 0.0000001))
{
return true;
}
else
{
return false;
}
}
bool DoseTreeAHaveTreeB(TreeNode* A, TreeNode* B)
{
if (B == nullptr)
{
return true;
}
if (A == nullptr)
{
return false;
}
if (!Equal(A->val, B->val))
{
return false;
}
return DoseTreeAHaveTreeB(A->left, B->left) && DoseTreeAHaveTreeB(A->right, B->right);
}
bool isSubStructure(TreeNode* A, TreeNode* B)
{
bool result = false;
if (A != nullptr && B != nullptr)
{
if (Equal(A->val, A->val))
{
result = DoseTreeAHaveTreeB(A, B);
}
if (!result)
{
result = isSubStructure(A->left, B);
}
if (!result)
{
result = isSubStructure(A->right, B);
}
}
return result;
}
以上是关于《剑指Offer——树的子结构》代码的主要内容,如果未能解决你的问题,请参考以下文章