判断一个节点是否在一颗二叉树中:
#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;
}
}
该博客探讨了如何判断一个节点是否存在于一棵二叉树中,通过分两步寻找相同根节点并比较左右子树来实现。内容包含问题分析及解决方案的代码实现。

624

被折叠的 条评论
为什么被折叠?



