判断一棵二叉树是否是二叉树的子树
2016-09-05 14:41
375 查看
#include <iostream> using namespace std; struct TreeNode { int val; struct TreeNode *left, *rigth; TreeNode(int x) : val(x), left(NULL), rigth(NULL) { } }; class Solution { public: bool DoHasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) { bool result = false; if (pRoot2 == NULL)//能遍历到pRoot2说明至少pRoot2一支已经匹配成功 { return true; } if (pRoot1 == NULL)//一定要在上面之后,如果为真,说明pRoot1所在的一支没有,匹配不成功 { return false; } if (pRoot1->val != pRoot2->val) { return false; } result = DoHasSubtree(pRoot1->left, pRoot2->left);//左支匹配成功 if (result != false)//在左支匹配成功的前提下,进行右支匹配 { result = DoHasSubtree(pRoot1->right, pRoot2->right); } return result; } bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) { bool result = false; if (pRoot1 != NULL && pRoot2 != NULL) //pRoot1 == NULL到达叶子节点还没找到,则返回false;pRoot2 == NULL一开始就为空直接返回false { if (pRoot1->val == pRoot2 ->val)//找到根节点相同,可能匹配 { result = DoHasSubtree(pRoot1, pRoot2);//匹配 } if (result == false)//上述匹配不成功,继续遍历pRoot1的所有左子树,反之结束遍历 { result = HasSubtree(pRoot1->left, pRoot2); } if (result == false)//pRoot1的所有左子树没有匹配成功,那就看pRoot1的所有右子树 { result = HasSubtree(pRoot1->right, pRoot2); } } return result; } }; int main(void) { TreeNode p1(8), p2(8), p3(7), p4(9), p5(2), p6(4), p7(7); TreeNode n1(8), n2(9), n3(2); p1.left = &p2; p1.rigth = &p3; p2.left = &p4; p2.rigth = &p5; p5.left = &p6; p5.rigth = &p7; n1.left = &n2; n1.rigth = &n3; TreeNode *Head = NULL; Solution s; s.HasSubtree(&p1, &n1); return 0; }
相关文章推荐
- 如何判断一棵二叉树树是否为另一棵二叉树的子树
- 判断一个节点是否在一棵二叉树中和判断一颗二叉树是否是另一颗树的子树——题集(十二)
- 二叉树:判断二叉树是否另一棵二叉树的子树
- day14之判断一个节点是否在一棵二叉树中+判断一颗二叉树是是否是另一颗树的子树
- 判断一个节点是否在一棵二叉树中&判断一颗二叉树是是否是另一颗树的子树
- 判断一个节点是否在一棵二叉树中&&判断一颗二叉树是是否是另一颗树的子树
- 【判断一个节点是否在一棵二叉树中】/【判断一颗二叉树是是否是另一颗树的子树】
- 判断一棵二叉树是否是另一棵树的子树
- 判断一棵二叉树是否为另一棵二叉树的子树,Python实现
- 判断一棵二叉树是否是另一棵二叉树的子树
- leetcode_101. Symmetric Tree 对称树, 判断一棵二叉树是否对称,递归方法
- 判断一棵二叉树是否为平衡二叉树
- 判断一个二叉树是否是另一个的子树
- 输入一棵二叉树,判断该二叉树是否是平衡二叉树
- 判断一颗二叉树是是否是另一颗树的子树
- .如何判断一棵二叉树是否是平衡二叉树
- 判断一颗二叉树是是否是另一颗树的子树。比如tree2是tree1的子树
- 一棵二叉树是否为另一棵二叉树的子树
- 判断一棵二叉树是否是平衡二叉树/求一颗二叉树的镜像