面试题26:树的子结构

从树中递归找到与需要配对的根节点相同的节点,然后就往下遍历,如果判断不相等,则继续寻找

#include<iostream>

struct treeNode
{
	int m_nValue;
	treeNode* pLfet, * pRight;
	treeNode(int _Value) :m_nValue(_Value), pLfet(nullptr), pRight(nullptr){}
};

bool HasSubTree(treeNode* node1, treeNode* node2)
{
	bool result = false;
	if (node1 != nullptr && node2 != nullptr)
	{
		if (node1->m_nValue == node2->m_nValue)//找到与node2根节点一样的子节点
			result = DoesTree1HaveTree2(node1, node2);//找到与根节点一样的话就往下遍历
		if (!result)
			HasSubTree(node1->pLfet, node2);//往左边找与根节点相同的
		if (!result)
			HasSubTree(node1->pRight, node2);//往右边找与根节点相同的
	}
	return result;
}

bool DoesTree1HaveTree2(treeNode* node1, treeNode* node2)
{
	if (node2 == nullptr)return true;//如果需要配对的节点遇到了空,则判断到底
	if (node1 == nullptr)return false;
	if (node1->m_nValue != node2->m_nValue)
		return false;
	return DoesTree1HaveTree2(node1->pLfet, node2->pLfet) && (node1->pRight, node2->pRight);//当左边和右边同时都满足时,就返回true
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值