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

来源:互联网 发布:淘宝店铺收到差评 编辑:程序博客网 时间:2024/06/05 11:28

判断一个节点是否在一颗二叉树中:

#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;}}



阅读全文
0 0
原创粉丝点击