摘自:《剑指offer》面试题18
评论:写的很简练,很明白,就是自己写不出来这样好的代码。。。。
//题目:输入两颗二叉树A和B,判断B是不是A的子结构。二叉树结点的定义如下:
#include<iostream>
using namespace std;
struct BinaryTreeNode
{
int value;
BinaryTreeNode *pLeft;
BinaryTreeNode *PRight;
};
bool hasSubtree(BinaryNode* pRoot1, BinaryTreeNode* pRoot2)
{
bool result = false;
if(pRoot1->value == pRoot2->value)
result = DosTreeHaveTree2(pRoot1,pRoot2);
if(!result)
result = hasSubtree(pRoot1->pLeft,pRoot2);
if(!result)
result = hasSubtree(pRoot2->PRight,pRoot2);
return result;
}
bool DosTreeHaveTree2(BinaryTreeNode* pRoot1, BinaryTreeNode* pRoot2)
{
if(pRoot2 == null)
return true;
if(pRoot1 == null)
return false;
if(pRoot1->value != pRoot2->value)
return false;
return DosTreeHaveTree2(pRoot1->pLeft,pRoot2->pLeft)
&& DosTreeHaveTree2(pRoot2->PRight,pRoot2->pRight);
}