输入两棵二叉树 A 和 B,判断树 B 是不是 A 的子结构。
例如,下图中的两棵树 A 和 B, 由于 A 中有一部分子树的结构和 B 是一样的,因此 B 就是 A
的子结构。
例如,下图中的两棵树 A 和 B, 由于 A 中有一部分子树的结构和 B 是一样的,因此 B 就是 A
的子结构。
思路:首先采用一种方式来遍历A树,发现A树的某个节点和B树的根节点的值相等,从这个节点开始遍历是否为A树的一部分。
bool IsSame(BinTree* first,BinTree* second)
{
if(first == NULL && second == NULL)
return true;
if((first==NULL&&second!=NULL)|| (first!=NULL&&second==NULL))
return false;
if(first->value != second->value)
return false;
return (IsSame(first->left,second->left))&&(IsSame(first->right,second->right));
}
bool VerifyOfPart(BinTree* root,BinTree* part)
{
stack<BinTree*> st;
if(part == NULL)
return true;
while(root != NULL || !st.empty())
{
if(root != NULL)
{
//cout<<root->value<<endl;
if(root->value == part->value && IsSame(root,part))
return true;
st.push(root);
root = root->left;
}
else
{
root = st.top();
st.pop();
root = root->right;
}
}
return false;
}