判断一棵树是否为另一棵树的子树
2016-06-17 15:44
344 查看
题目:判断一棵树A是否为另一棵树的子结构B
思路:解决步骤:
1、先判断根节点是否相同,若不相同,则遍历B直至找到相等的节点。
2、找到相等的根节点之后,就要遍历左右子树并进行判断,若左右子树不等,则回到1,遍历下一个节点。
本文采用的是先遍历左子树,在遍历右子树的顺序进行的。其中istrue函数即判断根节点以及左右子树是否一致。为了方便编程,采用递归实现。
/*
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;
if(pRoot1!=NULL&&pRoot2!=NULL){
if(pRoot1->val==pRoot2->val)
result=istrue(pRoot1,pRoot2);
if(!result){
result=HasSubtree(pRoot1->left,pRoot2);
}
if(!result){
result=HasSubtree(pRoot1->right,pRoot2);
}
}
return result;
}
bool istrue(TreeNode* proot1, TreeNode* proot2){
if(proot2==NULL) return true;
if(proot1==NULL) return false;
if(proot1->val!=proot2->val) return false;
return istrue(proot1->left,proot2->left)&&istrue(proot1->right,proot2->right);
}
};
思路:解决步骤:
1、先判断根节点是否相同,若不相同,则遍历B直至找到相等的节点。
2、找到相等的根节点之后,就要遍历左右子树并进行判断,若左右子树不等,则回到1,遍历下一个节点。
本文采用的是先遍历左子树,在遍历右子树的顺序进行的。其中istrue函数即判断根节点以及左右子树是否一致。为了方便编程,采用递归实现。
/*
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;
if(pRoot1!=NULL&&pRoot2!=NULL){
if(pRoot1->val==pRoot2->val)
result=istrue(pRoot1,pRoot2);
if(!result){
result=HasSubtree(pRoot1->left,pRoot2);
}
if(!result){
result=HasSubtree(pRoot1->right,pRoot2);
}
}
return result;
}
bool istrue(TreeNode* proot1, TreeNode* proot2){
if(proot2==NULL) return true;
if(proot1==NULL) return false;
if(proot1->val!=proot2->val) return false;
return istrue(proot1->left,proot2->left)&&istrue(proot1->right,proot2->right);
}
};
相关文章推荐
- AVL树-自平衡二叉查找树(Java实现)
- C语言二叉树的非递归遍历实例分析
- 使用C语言构建基本的二叉树数据结构
- 一波二叉树遍历问题的C++解答实例分享
- 举例讲解C语言程序中对二叉树数据结构的各种遍历方式
- C++非递归队列实现二叉树的广度优先遍历
- PHP实现的线索二叉树及二叉树遍历方法详解
- C#使用前序遍历、中序遍历和后序遍历打印二叉树的方法
- C#非递归先序遍历二叉树实例
- C++将二叉树转为双向链表及判断两个链表是否相交
- C++非递归建立二叉树实例
- C语言实现找出二叉树中某个值的所有路径的方法
- C++实现二叉树遍历序列的求解方法
- C语言实现二叉树遍历的迭代算法
- C++实现查找二叉树中和为某一值的所有路径的示例
- 用C语言判断一个二叉树是否为另一个的子结构
- C++实现二叉树非递归遍历方法实例总结
- C++二叉树结构的建立与基本操作
- 深入遍历二叉树的各种操作详解(非递归遍历)
- Python实现二叉树结构与进行二叉树遍历的方法详解