您的位置:首页 > 其它

每日一题之判断一个节点是否在一棵二叉树中

2017-07-29 14:00 549 查看
判断一个节点是否在一颗二叉树中:

#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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐