B是不是A的子结构

来源:互联网 发布:中国网络作家排名 编辑:程序博客网 时间:2024/06/05 21:14

摘自:《剑指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);}