【面试题】剑指Offer-18-判断一颗树是否为另一颗树的子树

来源:互联网 发布:淘宝话术技巧 编辑:程序博客网 时间:2024/06/04 05:09

题目概述


解题思路

这里用到递归的思想

先递归【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;}


1 0
原创粉丝点击