剑指Offer——(17)树的子结构
来源:互联网 发布:超级sql注入工具 使用 编辑:程序博客网 时间:2024/06/03 19:20
题目描述:
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
实现如下:
//分两步//第一步:寻找与B树根节点val相等的A树节点。如果找到进入第二步,否则继续寻找,直到找完A树//第二步:以找的节点作为A树子树的根节点,同时遍历两棵树,判断是否所有节点都相同//特殊情况://1.进行第二步时注意有可能存在B树大小等于A的子树、B树大小小于A的子树、B树大小大于A的子树//2.注意对无效值的防御//3.减少递归此数,及时判断return/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};*/class Solution {public: //第二步 bool Subtree(TreeNode* pRoot1, TreeNode* pRoot2) { if (pRoot1 == NULL && pRoot2 == NULL) return true;//B树大小等于A的子树 if (pRoot1 != NULL && pRoot2 == NULL) return true;//B树大小小于A的子树 if (pRoot1 == NULL && pRoot2 != NULL) return false;//B树大小大于A的子树 if (pRoot1->val == pRoot2->val)//如果val相等则进行进一步比较 return Subtree(pRoot1->left, pRoot2->left) && Subtree(pRoot1->right, pRoot2->right); else//否则直接return return false; } //第一步 bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) { //对空指针防御 if (pRoot1 == NULL || pRoot2 == NULL) return false; TreeNode *p1 = pRoot1; bool flag = false;//是否相等标志 if (p1->val == pRoot2->val)//若A树有节点val等于B树根节点val,进入第二步 { flag = Subtree(p1, pRoot2);//开始第二步递归调用 if (flag) return flag;//如果是子结构,直接return } //否则继续第一步 flag = HasSubtree(p1->left, pRoot2);//对左子树进行第一步 if (flag) return flag; flag = HasSubtree(p1->right, pRoot2);//对右子树进行第一步 if (flag) return flag; return flag; }};
0 0
- 剑指Offer——(17)树的子结构
- 剑指offer—树的子结构
- 剑指offer—树的子结构
- 剑指Offer—17—树的子结构
- 剑指offer(17)—树的子结构
- 【剑指 offer】(十八)—— 树的子结构
- 剑指offer--17树的子结构
- 剑指offer 17 树的子结构
- 【剑指offer-解题系列(17)】树的子结构
- 剑指offer第17题(树的子结构)
- 《剑指offer》——树的子结构
- 剑指offer——树的子结构
- 剑指offer——树的子结构
- 剑指offer——树的子结构
- 剑指offer——树的子结构_
- 剑指Offer——树的子结构
- 剑指offer——普通二叉树的子结构
- 剑指offer——17.树的子结构
- Cocos2d-js模块化开发的一种解决方案
- 完全卸载mysql
- Thinking In Java学习进程---对象的入门1.5 继承:重新使用接口
- weblogic自定义的log4j2
- JAVA NIO解析
- 剑指Offer——(17)树的子结构
- Python eventlet
- JSP笔记与实验室管理系统更改的心得
- 417. Pacific Atlantic Water Flow
- Hibernate关联关系配置(一对多、一对一和多对多)
- 3.4.1.2_光标的闪烁效果_清定时器版本
- css优先级
- 让程序员跳槽的非钱原因
- Linux下的Mysql性能测试工具 sysbench