【面试题】剑指Offer-18-判断一颗树是否为另一颗树的子树
2017-04-06 11:40
561 查看
题目概述
解题思路
这里用到递归的思想先递归【HasSubTree】找到和子树相同值的节点
然后再用另一个递归函数【DoseTree1HasTree2】判断是否相等
如果遍历到SubT子树的叶子结点,则匹配成功
如果SrcT为空,则匹配没有成功
如果都存在,则判断左子树和右子树
根据左子树和右子树的返回结果判断此时是否完全匹配
如果不匹配,则继续【HasSubTree】找值相同的节点
代码实现
bool DoesTree1HasTree2(const TreeNode* srcT, const TreeNode* subT){
//如果子树到了叶子节点,表示成功
if (subT == NULL)
return true;
//表示没有匹配成功
if (srcT == NULL)
return false;
bool retLeft = DoesTree1HasTree2(srcT->_left, subT->_left);
bool retRight = DoesTree1HasTree2(srcT->_right, subT->_right);
return retLeft && retRight;
}
bool HasSubTree(const TreeNode* srcT, const TreeNode* subT)
{
if (subT == NULL)
return false;
bool ret = false;
if (srcT != NULL)
{
if (srcT->_data == subT->_data)
{
ret = DoesTree1HasTree2(srcT, subT);
}
if (!ret)
ret = HasSubTree(srcT->_left, subT);
if (!ret)
ret = HasSubTree(srcT->_right, subT);
}
return ret;
}
相关文章推荐
- 【面试题】剑指offer18--判断一个二叉树是否为另一个二叉树的子结构
- 剑指offer 面试题18 判断二叉树B是否是A的子结构
- 【面试题】剑指Offer-39-求二叉树的深度和判断一颗树是否为平衡二叉树
- 剑指offer面试题-判断链表是否带环并求环的入口点和环的长度
- 【剑指offer】判断二叉树是否平衡(左右子树高度差最多为1)
- 剑指offer-面试题18 判断二叉树B是不是二叉树A的子结构
- 剑指offer面试题之判断一颗二叉树是不是平衡二叉树
- 剑指offer-第四章解决面试题思路(判断一个数组是否为二叉搜索树的后序遍历序列)
- 剑指Offer 面试题28:判断一棵二叉树是否镜对称 Java代码实现
- 剑指Offer----面试题39(2):判断是否为平衡二叉树
- 【剑指offer】面试题18:输入两颗二叉树A和B,判断B是不是A的子结构?
- 剑指offer 面试题39 求二叉树深度|判断是否为平衡二叉树
- 剑指offer——面试题39:扩展问题判断一个树是否是平衡二叉树(递归)
- 14.剑指offer-判断一颗二叉树是否对称
- 剑指Offer--018-树的子结构(判断B树是不是A树的一颗子树)
- 剑指Offer16 判断子树
- 二叉树--判断一颗二叉树是是否是另一颗树的子树。比如tree2是tree1的子树。
- 判断一颗二叉树是是否是另一颗树的子树
- 判断一个节点是否在一棵二叉树中&&判断一颗二叉树是是否是另一颗树的子树
- 剑指offer:二叉搜索树的后序遍历序列(判断一个数组是否是二叉搜索树的后续遍历序列)