在二叉树中查找一个节点
struct TreeNode
{
int data;
TreeNode* left;
TreeNode* right;
TreeNode(int val)
: data(val)
, left(NULL)
, right(NULL)
{}
};
bool FindNode(TreeNode* root, TreeNode* node)
{
if (NULL == root)
return false;
if (root->data == node->data)
return true;
return FindNode(root->left, node) || FindNode(root->right, node);
}
判断一个树是否是另一个树的子树
bool hasSubTree(TreeNode* root1, TreeNode* root2)
{
if (root1 == NULL || root2 == NULL)
return false;
if (root1->data == root2->data)
{
if (isSubTree(root1, root2))
return true;
}
return hasSubTree(root1->left, root2) || hasSubTree(root1->right, root2);
}
bool isSubTree(TreeNode* root1, TreeNode* root2)
{
if (root1 == NULL)
return true;
if (root2 == NULL)
return false;
if (root1->data != root2->data)
return false;
return isSubTree(root1->left, root2->left) && isSubTree(root1->right, root2->right);
}