判断B是否为A的子结构
来源:互联网 发布:汉诺塔递归算法干嘛的 编辑:程序博客网 时间:2024/05/18 11:16
题目描述:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
解题思路:从A的根节点开始与B树进行匹配,若节点值相同就继续匹配左右孩子节点,若出现不同就从A的左右孩子开始匹配B的根节点,直到在A中找到一个与B节点完全相同的子结构。可以采用两个模块完成,HasSubtree函数用于判断根节点是否一致,递归调用,IsSubtree函数用于判断其余节点是否一致,递归调用;所以使用两个递归函数实现了回溯功能。
具体代码如下:
/*struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}};*/class Solution {public: bool IsSubtree(TreeNode* pRoot1, TreeNode* pRoot2){ if(!pRoot2)//若B的节点匹配完毕,就结束判断,返回true return true; if(!pRoot1)//若A的节点为空,就返回false,因为B的节点非空 return false; if(pRoot1->val==pRoot2->val)//若两者相等,就继续判断子节点是否一致。 return IsSubtree(pRoot1->left,pRoot2->left)&&IsSubtree(pRoot1->right,pRoot2->right); else return false;//当节点不一致时,就返回false。 } bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) { if(!pRoot1||!pRoot2)//若两棵树中的一个根节点为空,就返回false return false; return IsSubtree(pRoot1,pRoot2)||//判断从pRoot1和pRoot2开始子树是否完全相同,若相同就结束程序。 HasSubtree(pRoot1->left,pRoot2)||//当pRoot1和pRoot2不完全匹配时,判断A的左子树是否包含B,若包含就返回true,结束程序。 HasSubtree(pRoot1->right,pRoot2);//<span style="font-family: Arial, Helvetica, sans-serif;">当A的左子树不包括B时,判断A的右子树是否包含B。</span> } };
1 0
- 判断B是否为A的子结构
- 判断B是否A的子结构
- 18判断B是否为A数的子结构python
- 判断B是否是A的子结构
- [Facebook] 给两棵二叉树A,B,判断A 是否 B的子结构
- 输入两个二叉树A与B,判断B是否是A的子结构
- 树的子结构(输入两个二叉树A与B,判断B是否是A的子结构)
- 剑指offer 面试题18 判断二叉树B是否是A的子结构
- 剑指offer-判断B是不是A的子结构
- 树------判断数A为数B的子结构
- 判断R2是否为R1的子结构,递归实现
- 【树】B是不是A的子结构 + B和A是否相等
- 剑指offer-树的子结构 判断二叉树B是不是A的子结构
- 输入两颗二叉树A,B,判断B是不是A的子结构。
- java实现:输入两颗二叉树A,B,判断B是不是A的子结构
- 输入两颗二叉树A,B,判断B是不是A的子结构
- 输入两颗二叉树A和B,判断B是不是A的子结构
- java 输入两颗二叉树A,B,判断B是不是A的子结构。
- 如何用MathType编辑省略号
- jquery 获取 outerHtml 包含当前节点本身的代码
- Flume-ng的原理和使用
- JAVA环境变量配置
- AJAX知识
- 判断B是否为A的子结构
- ExtJS学习:MVC模式案例(四)
- 指针函数和函数指针的区别
- HDU 3501 Calculation 2(容斥原理、求[1,n - 1]中和n不互素的数字之和)
- HDU 2031 进制转换
- CentOS下安装中文支持及字体
- pta--树的同构
- Linux常用的命令
- 解决react-native 创建工程、init过程太慢的问题