每日一题之判断一个节点是否在一棵二叉树中
2017-07-29 14:00
549 查看
判断一个节点是否在一颗二叉树中:
比如:
分析原理:
我们分两步,第一步在树A中找到和B树一样的根节点R,第二步是判断在相同的根节点下有没有相同的左右子树。
实现的代码:
#include<iostream>
//#include<stack>
using namespace std;
struct TreeNode
{
int _value;
TreeNode* _left;
TreeNode* _right;
TreeNode(int x)
:_value(NULL)
, _left(NULL)
, _right(NULL)
{}
};
bool DoesTree1HaveTree2(TreeNode*pNode1, TreeNode*pNode2)
{
if (pNode2 == NULL)
return true;
if (pNode1 == NULL)
return false;
if (pNode1->_value != pNode2->_value)
return false;
return DoesTree1HaveTree2(pNode1->_left, pNode2->_left) && DoesTree1HaveTree2(pNode1->_right, pNode2->_right);
}
bool HusSubtree(TreeNode* pNode1, TreeNode* pNode2)
{
bool result = false;
if (pNode1 != NULL&&pNode2 != NULL)
{
if (pNode1->_value == pNode2->_value)
result = DoesTree1HaveTree2(pNode1, pNode2);
if (!result)
result = HusSubtree(pNode1->_left, pNode2);
if (!result)
{
result = HusSubtree(pNode1->_right, pNode2);
}
return result;
}
}
#include<iostream> //#include<stack> using namespace std; struct TreeNode { int value; TreeNode* left; TreeNode* right; TreeNode(int x) :value(NULL) , left(NULL) , right(NULL) {} }; bool IsIntree(TreeNode*root, int x) { if (root == NULL) return false; if (root->value == x) return true; return IsIntree(root->left, x) || IsIntree(root->right, x); }那我们如何判断一棵树是否存在与另外一棵树中:
比如:
分析原理:
我们分两步,第一步在树A中找到和B树一样的根节点R,第二步是判断在相同的根节点下有没有相同的左右子树。
实现的代码:
#include<iostream>
//#include<stack>
using namespace std;
struct TreeNode
{
int _value;
TreeNode* _left;
TreeNode* _right;
TreeNode(int x)
:_value(NULL)
, _left(NULL)
, _right(NULL)
{}
};
bool DoesTree1HaveTree2(TreeNode*pNode1, TreeNode*pNode2)
{
if (pNode2 == NULL)
return true;
if (pNode1 == NULL)
return false;
if (pNode1->_value != pNode2->_value)
return false;
return DoesTree1HaveTree2(pNode1->_left, pNode2->_left) && DoesTree1HaveTree2(pNode1->_right, pNode2->_right);
}
bool HusSubtree(TreeNode* pNode1, TreeNode* pNode2)
{
bool result = false;
if (pNode1 != NULL&&pNode2 != NULL)
{
if (pNode1->_value == pNode2->_value)
result = DoesTree1HaveTree2(pNode1, pNode2);
if (!result)
result = HusSubtree(pNode1->_left, pNode2);
if (!result)
{
result = HusSubtree(pNode1->_right, pNode2);
}
return result;
}
}
相关文章推荐
- 判断一个节点是否在一棵二叉树中
- 判断一个节点是否在一棵二叉树中&判断一颗二叉树是是否是另一颗树的子树
- day14之判断一个节点是否在一棵二叉树中+判断一颗二叉树是是否是另一颗树的子树
- 判断一个节点是否在一棵二叉树中&&判断一颗二叉树是是否是另一颗树的子树
- 判断一个节点是否在一棵二叉树中
- 【判断一个节点是否在一棵二叉树中】/【判断一颗二叉树是是否是另一颗树的子树】
- 判断一个节点是否在一棵二叉树中
- 二叉树--判断一个节点是否在一棵二叉树中。
- 判断一个节点是否在一棵二叉树中和判断一颗二叉树是否是另一颗树的子树——题集(十二)
- 面试题:判断一个节点是否在一棵二叉树中
- 判断一个序列是否是一棵二叉树的后序遍历序列(分治算法)
- 求两个节点的最近公共祖先多种解法&&判断一个节点是否在二叉树中
- 2个二叉树A、B,树的每个节点上都有一个整数值。如何判断A与B是否其中一个是另一个的子树?
- 判断一个节点是否在二叉树中,判断tree2是否为tree1的子树
- 每日一题之判断一棵二叉树是否是平衡二叉树以及求一颗二叉树的镜像
- 每日一题——判断二叉树是否平衡,求一棵二叉树的镜像
- Java代码 给出一个二叉树和一个数,判断该二叉树是否存在一个从根节点到叶节点的和与给出的数相同
- 有一个二叉树,现在怀疑它有一个结点有2个父节点,请写出一个函数来判断该二叉树是否存在一个节点含有2个父节点。如果存在,返回true,否则返回false。
- 有一个二叉树,现在怀疑它有一个结点有2个父节点,请写出一个函数来判断该二叉树是否存在一个节点含有2个父节点。如果存在,返回true,否则返回false。
- 判断一个结点/一个树是否在一棵二叉树中