《剑指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——树的子结构》代码的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer 17. 代码的鲁棒性树的子结构

剑指OFFER 树的子结构

剑指offer树的子结构python

剑指offer——树的子结构

剑指offer:树的子结构

剑指offer 树的子结构