面试题目:输入两颗二叉树A,B,判断B是不是A的子结构;
先找到B根节点对应的A的节点,在判断是否相同。
主要部分代码:
bool ifTheSameTree(BiTree &t1,BiTree &t2)
{
if (t2 == NULL)return true;//B树为空,肯定是相同的树
if(t1 == NULL)return false;
if (t1->value!=t2->value)return false;//节点不同,不是
else
{
return ifTheSameTree(t1->lchild,t2->lchild) & ifTheSameTree(t1->rchild,t2->rchild);//左右均为true返回true
}
}
bool isSubBinTree(BiTree &t1,BiTree &t2)
{
bool result = false;
if(t1 != NULL && t2 != NULL)
{
if (t1->value == t2->value)//根节点相同,就判断A,B树是否一样
{
result = ifTheSameTree(t1,t2);
}
if(!result)result = isSubBinTree(t1->lchild,t2);//判断左子树
if (!result) result = isSubBinTree(t1->rchild,t2);//判断右子树
}
return result;
}