1.判断一个节点是否在一颗二叉树中
首先判断此节点是不是根节点,是根节点的话就返回表示节点在树中,否则递归根节点的左右子树,继续向下寻找
bool _IsNode(Node* node,Node* root)
{
if (root == NULL)
return false;
//节点位根节点
if (node->_data == root->_data)
return true;
//节点不是根节点
else
{
//左右子树中找
return _IsNode(node, root->_left) || _IsNode(node, root->_right);
}
}
2.判断一颗二叉树是是否是另一颗树的子树
1>判断2棵树的根节点是不是相同,如果相同,继续递归判断他们的左右子树是不是相同
2>2棵树的根节点不相同的话,递归判断t1的左子树或者右子树是否跟t2一样
bool _IsChildTree(Node* root1, Node* root2)
{
if (root2 == NULL)
return true;
if (root1 == NULL)
return false;
if (root1->_data == root2->_data)
return _IsChildTree(root1->_left, root2->_left)
&& _IsChildTree(root1->_right, root2->_right);
else
return _IsChildTree(root1->_left, root2) || _IsChildTree(root1->_right, root2);
}