剑指Offer(26)树的子结构
2018-01-28 11:47
337 查看
题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
算法:递归算法
数据结构:二叉树
编程语言:C++
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
算法:递归算法
数据结构:二叉树
编程语言:C++
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { public: //该函数用于搜索两个值相同的节点 bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) { bool result=false;//设定返回初始值为false if(pRoot1!=nullptr&&pRoot2!=nullptr)//两个树结构都不为空 { if(pRoot1->val==pRoot2->val) result=DoesHasSubtree(pRoot1,pRoot2); if(!result)//遍历左子树 result=HasSubtree(pRoot1->left,pRoot2); if(!result)//遍历右子树 result=HasSubtree(pRoot1->right,pRoot2); } return result; } //该函数用于判断两个节点的子结构是否相同 bool DoesHasSubtree(TreeNode* pRoot1,TreeNode* pRoot2) { if(pRoot2==nullptr)//子结构为空(遍历到叶子节点),返回真值 return true; if(pRoot1==nullptr)//父结构为空(父节点先遍历结束),返回假值 return false; if(pRoot1->val!=pRoot2->val)//当前递归的两个节点的值如果不相同,返回false return false; //递归遍历各个节点 return DoesHasSubtree(pRoot1->left,pRoot2->left)&&DoesHasSubtree(pRoot1->right,pRoot2->right); } };
相关文章推荐
- 剑指Offer(第二版)面试题26:树的子结构
- 剑指offer——面试题26:复杂链表的复制
- 剑指Offer编程练习017——树的子结构
- 剑指Offer系列-面试题18:树的子结构
- 剑指offer(26-30)编程题
- 《剑指Offer》面试题26:复杂链表的复制
- 剑指offer 树的子结构
- 剑指offer之面试题26:复杂链表的复制
- 《剑指offer》-树的子结构
- 《剑指offer》树的子结构
- 剑指offer面试题 java解答26-30
- 剑指offer 面试题18: 树的子结构(LintCode 245.Subtree) 题解
- 剑指Offer系列-面试题26:复杂链表的复制
- 《剑指Offer》学习笔记--面试题18:树的子结构
- 剑指Offer面试题:17.树的子结构
- 剑指offer系列之十六:树的子结构
- 剑指offer(17)—树的子结构
- 剑指offer-判断B是不是A的子结构
- 剑指offer(19):树的子结构
- 剑指Offer----面试题18:树的子结构