树的子结构
#include <iostream>
using namespace std;
//树的子结构
struct TreeNode
{
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x)
: val(x), left(NULL), right(NULL)
{
}
};
class Solution
{
public:
bool HasSubtree(TreeNode* parent, TreeNode* child) {
if (child == NULL || parent == NULL) {
return false;
}
bool result;
if (parent->val == child->val) {
result = DoesParentHaveChild(parent, child);
}//父树节点与子数根节点相同,直接开始判断
if (result != true) {
return HasSubtree(parent->left, child) || HasSubtree(parent->left, child);
}
else {
return true;
}
}
bool DoesParentHaveChild(TreeNode *parent , TreeNode *child) {
if (child == NULL) {
return true;//子数空,必是子数
}
else if (parent == NULL) {
return false;
}
//两个节点的值不想等,必然不是父子关系
if (parent->val != child->val) {
return false;
}
else {//否则相等,递归判断左子数和右子树的对应节点是否相等
return DoesParentHaveChild(parent->left,child->left)
&& DoesParentHaveChild(parent->right, child->right);
}
}
};
int main()
{
cout << "test" << endl;
return 0;
}