码迷,mamicode.com
首页 > 其他好文 > 详细

判断二叉树A是否包含二叉树B

时间:2020-04-03 00:25:43      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:要求   bool   nbsp   b树   return   code   root   相等   number   

1、要求:
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
 
2、思路:
(1)首先确定传入的是否是空树;
(2)先判断A的根与B子树是否相等;如果不相等,则比较A的左子树是否和B子树相等;再不相等则判断A的右子树是否和B子树相等;
备注:
  A树在判断函数中为空有两种情况:
  a.如果A树为空且B树不为空说明不匹配,
  b.如果A为空,B为空,则说明匹配。
 
2、代码实现:
 
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
		val(x), left(NULL), right(NULL) {
	}
};

bool isSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
{
	if (pRoot1 == NULL && pRoot2 != NULL)
		return false;
	if (pRoot2 == NULL)
		return true;
	if (pRoot1->val != pRoot2->val)
		return false;
	return isSubtree(pRoot1->left, pRoot2->left) && isSubtree(pRoot1->right, pRoot2->right);
}
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
{
	bool result = false;
	if (pRoot1 != NULL && pRoot2 != NULL)
	{
		if (pRoot1->val == pRoot2->val) {
			result = isSubtree(pRoot1, pRoot2);
		}
		if (!result)
			result = HasSubtree(pRoot1->left, pRoot2);
		if (!result)
			result = HasSubtree(pRoot1->right, pRoot2);
	}
	return result;
}

  

  

判断二叉树A是否包含二叉树B

标签:要求   bool   nbsp   b树   return   code   root   相等   number   

原文地址:https://www.cnblogs.com/veis/p/12623800.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!