// 面试题26:树的子结构
// 题目:输入两棵二叉树A和B,判断B是不是A的子结构。
static bool is_subtree(const std::shared_ptr<node_bt<int>>& root1,
const std::shared_ptr<node_bt<int>>& root2)
{
if(root1==nullptr || root2 == nullptr)
{
return false;
}
bool result = false;
if(root1->data == root2->data)
{
result = _is_subtree(root1, root2);
}
if(!result)
{
result = is_subtree(root1->left, root2);
}
if(!result)
{
result = is_subtree(root1->right, root2);
}
return result;
}
static bool _is_subtree(const std::shared_ptr<node_bt<int>>& root1,
const std::shared_ptr<node_bt<int>>& root2)
{
if(root2 == nullptr)
return true;
if(root1 == nullptr)
return false;
if(root1->data != root2->data)
return false;
return _is_subtree(root1->left, root2->left) &&
_is_subtree(root1->right, root2->right);
}