面试题26:树的子结构

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

【代码】

#include<iostream>
//#include<vector>
#include<string>
#include<algorithm>
//#include<stack>

using namespace std;
struct BinaryTreeNode
{
	double value;
	BinaryTreeNode* left;
	BinaryTreeNode* right;
};

bool equal(double v1,double v2)
{
	if (v1-v2>-0.0000001 && v1-v2<0.0000001)
	{
		return true;
	}
	else
	{
		return false;
	}
}

bool DoseTree1HasTree2(BinaryTreeNode* root1, BinaryTreeNode* root2)
{
	if (root2==NULL)
	{
		return true;
	}
	if (root1==NULL)
	{
		return false;
	}
	if (!equal(root1->value, root2->value))
	{
		return false;
	}

	return DoseTree1HasTree2(root1->left, root2->right) && DoseTree1HasTree2(root1->left, root2->right);
}
bool HasSubtree(BinaryTreeNode* root1, BinaryTreeNode* root2)
{
	bool has = false;
	if (root1!=NULL&&root2!=NULL)
	{
		if (equal(root1->value,root2->value))
		{
			has = DoseTree1HasTree2(root1, root2);
		}
		if (!has)
		{
			has = HasSubtree(root1->left, root2);
		}
		if (!has)
		{
			has = HasSubtree(root1->right, root2);
		}
	}

	return has;
}



int main()
{

	return 0;
}

/****



***/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值