剑指Offer——面试题26:树的子结构

面试题26:树的子结构
题目:输入两棵二叉树A和B,判断B是不是A的子结构。
在这里插入图片描述

#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
using namespace std;
struct BinaryTreeNode{
	double value;
	BinaryTreeNode* left;
	BinaryTreeNode* right;
};
bool Equal(double num1, double num2){
	if(fabs(num1-num2)<1e-6) return true;
	else return false;
}
bool DoesTree1HaveTree2(BinaryTreeNode* pRoot1, BinaryTreeNode* pRoot2){
	if(pRoot2==NULL) return true;
	if(pRoot1==NULL) return false;
	if(!Equal(pRoot1->value, pRoot2->value)) return false;
	return DoesTree1HaveTree2(pRoot1->left, pRoot2->left) && DoesTree1HaveTree2(pRoot1->right, pRoot2->right);
}
bool HasSubtree(BinaryTreeNode* pRoot1, BinaryTreeNode* pRoot2){
	bool result=false;
	if(pRoot1!=NULL && pRoot2!=NULL){
		if(Equal(pRoot1->value, pRoot2->value)){
			result=DoesTree1HaveTree2(pRoot1, pRoot2);
		}
		if(!result) result=HasSubtree(pRoot1->left, pRoot2);
		if(!result) result=HasSubtree(pRoot1->right, pRoot2);
	}
	return result;
}
int main() {
	
	return 0;
}
发布了42 篇原创文章 · 获赞 43 · 访问量 1066

猜你喜欢

转载自blog.csdn.net/qq_35340189/article/details/104408019