面试题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;
}