题目:输入二叉树A和B,判断B是不是A的子结构
struct BinaryTreeNode//二叉树
{
int key;
BinaryTreeNode* left;
BinaryTreeNode* right;
};
分析:应该分为两步,第一步找到相同的根节点,第二步判断是否相同,用递归的方法
先写第二步
二叉树和链表的递归终止条件先考虑出口NULL,还有一般性的功能判断
//找到相同根之后判断两个是否相等
bool DoesSame(BinaryTreeNode* pRoot1,BinaryTreeNode* pRoot2)
{
if (pRoot2==NULL) {//函数出口
return true;
}
if (pRoot1==NULL) {//函数出口
return false;
}
if (pRoot1->key!=pRoot2->key) {//一般性的功能判断
return false;
}
return DoesSame(pRoot1->left,pRoot2->left) && DoesSame(pRoot1->right,pRoot2->right);
}
第一步,找到相同的根节点,主要思路就是先序遍历
bool HasSame(BinaryTreeNode* pRoot1,BinaryTreeNode* pRoot2)
{
bool result=false;
if (pRoot