1.【基础题】–判断一个节点是否在一棵二叉树中(注意多测几个节点,看是否都能找到)
bool _Find(Node* root,const T x)//判断一个节点是否在一棵二叉树中
{
//1.如果树为空,返回空指针
if (root==NULL)
{
return false;
}
//2.如果找到了该节点,直接返回该节点的指针
if (root->data==x)
{
return true;
}
//3.如果当前树的根结点的值域不是X,则先找左子树,后找右子树
bool ret=_Find(root->left,x);
//3.1如果ret不为空,代表在左树中找到了结点,那么直接返回,不用在右树中找了
if (ret)
{
return ret;
}
else//3.2如果在左树中没有找到,那么就要在右树中找,在右树中无论找到与否,都直接返回,找到返回找到的结点,没找到就返回空;
{
ret=_Find(root->right,x);
return ret;
}
}
2.【基础题】–判断一颗二叉树是是否是另一颗树的子树。比如tree2是tree1的子树。
//判断root2树是否是root1树的子树
bool _HashTree(Node* root1,Node* root2 )
{
//1.如果两棵树有一颗为空,则返回错
if (root1==NULL||root2==NULL)
{
return false;
}
//2.两颗树都不为空的情况下
bool ret=false;
//2.1如果在tree1找到了与tree2的根结点相同的结点
//则开始比较以此节点为根结点的两颗树是否完全相同
if (root1->data==root2->data)
ret=Tree1Hastree2(root1,root2);
//如果不同,则继续在左树找相同的根结点,然后比较剩余结点
if (!ret)
{
ret=_HashTree(root1->left,root2);
}
//如果左树找完,没有找到相同的子树tree2,则在右树开始寻找相同的根结点,并比较该根结点之后的结点是否相同
if (!ret)
{
ret=_HashTree(root1->right,root2);
}
return re