树的子结构

本文介绍了一种算法,用于判断一棵二叉树是否为另一棵二叉树的子结构。通过递归方法,在目标二叉树中查找与源二叉树根节点值相等的节点,并进一步比较两树是否相同。

算法描述: 输入两棵树,判断A是不是B的子结构

解题思路:首先在B中寻找与A根节点的值相同的节点,然后从该节点入手判断接下来的二叉树是否相同很显然用地递归来实现具体算法如下:

// binaryTree.cpp : 定义控制台应用程序的入口点。

#include "stdafx.h"
#include <iostream> 
#include <string>
using namespace std;
struct binaryNode
{
	int data;
	binaryNode *left;
	binaryNode *right;
};
bool isSame(binaryNode *p1,binaryNode *p2)
{
	if(p1==NULL &&p2!=NULL)
	{
		return false;
	}
	if(p2==NULL)
	{
		return true;
	}
	if(p1->data!=p2->data)
	{
		return false;
	}else
	{
		return isSame(p1->left,p2->left) && isSame(p1->right,p2->right);
	}
}
bool subTree(binaryNode *p1,binaryNode *p2)
{
	if(p1==NULL)
	{
		return false;
	}
	bool isRight=false;
	if(p1->data==p2->data)
	{
		isRight=isSame(p1,p2);
		if(!isRight)
		{
			isRight=subTree(p1->left,p2);
		}
		if(!isRight)
		{
			isRight=subTree(p1->right,p2);
		}
	}
	return isRight;
}
bool isSubtree(binaryNode *p1,binaryNode *p2)
{
	if(p1==NULL || p2==NULL)
	{
		throw new exception("the input is error");
	}
	return subTree(p1,p2);
}
int _tmain(int argc, _TCHAR* argv[])
{

	getchar();
	return 0;
}


 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值