判断一棵树是不是另一棵树的子树
2017-03-19 09:36
246 查看
判断一棵树是不是另一棵树的子树
平台:VS2013我们知道,根据一个树的中序遍历与前序遍历可以重建一棵二叉树(在没有重复数据的情况下),因此我们可以根据这一思想来判断另一棵树是否是它的子树,然而,由于中序遍历与前序遍历的时间复杂度是O(n),在加上两个树的匹配,即使使用KMP,时间复杂度也有O(m+n),因此采用这种方法的效率是很低的。在这里,我们有一种效率更高的方法,即直接对树与子树进行遍历寻找,核心思想为:先比较两树的根节点的元素是否相同,如果相同则调用一个处理相同情况的函数来处理,如果不同,则先从父树的左孩子与该子树进行比较(这里主要是递归调用),如果还是不同,则比较右孩子与该子树比较,如果还不同,则返回false。不多说了,代码如下
bool isPart(TreeNode* pRoot1, TreeNode* pRoot2){ if(pRoot2 == nullptr) return true; if(pRoot1 == nullptr)return false; if(pRoot1->val != pRoot2->val)return false; return isPart(pRoot1->left, pRoot2->left)&&isPart(pRoot1->right, pRoot2->right); } bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2){ bool result=false; if(pRoot1!=nullptr && pRoot2!=nullptr){ if(pRoot1->val == pRoot2->val) result = isPart(pRoot1, pRoot2); if(!result) result = HasSubtree(pRoot1->left, pRoot2); if(!result) result = HasSubtree(pRoot1->right, pRoot2); } return result; }
相关文章推荐
- 判断一棵树是不是另一棵树的子树
- 判断一棵树是不是另外一棵树的子树(dfs)
- 判断一棵树是不是另外一棵树的子树
- 如何判断一棵树是不是另一棵树的子树
- 判断一棵树是不是另一棵树的子树
- 判断一棵树是否是另一棵树的子树(C语言版)
- 海量数据:判断一棵树是否为另一棵树的子树
- 剑指offer15--判断一个二叉树是不是另一个的子树
- 判断一棵树是否为另一棵树的子树
- 海量数据:判断一棵树是否为另一棵树的子树
- day15之判断一棵树是不是完全二叉树
- 判断一棵树是不是二叉搜索树
- POJ 1308-判断是不是一棵树
- 剑指Offer--018-树的子结构(判断B树是不是A树的一颗子树)
- 【二叉树】C++判断一棵树是否为另一棵树的子树【需考虑海量数据处理中的栈溢出】
- Subtree of Another Tree:判断一棵树是否是另一棵树的子树
- 判断一棵二叉树是不是另一棵二叉树的子树
- 面试题39_2 判断一棵树是不是平衡二叉树
- 判断一颗二叉树是不是另一颗的子结构(只是一部分,未必是子树)
- 程序员面试金典: 9.4树与图 4.8判断一棵树是否是另一棵树的子树