关于二叉树的构造函数:
在主调函数中并不声明号指针所指向的空间,在被调函数中可以直接使用。
//二叉树的定义,以及比较
#include <iostream>
using namespace std;
//二叉树的二叉链表的节点定义
typedef struct BiTNode
{
int data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//创建二叉树
//若该节点的数据为空,则输入“-1”
BiTree CreatBiTree(<span style="color:#ff6666;">BiTree T</span>)
{
cout<<"请输入int型的数据,以-1作为空节点:"<<endl;
int data;
cin>>data;
if (-1==data)
{
T=NULL;
}
else
{
T=new BiTNode;//很关键的地方,先传进来指针,但没有指向的响应的空间,现在开辟指向空间
if (NULL==T)
{
cout<<"Failed to malloc a new BiTNode!"<<endl;
}
T->data=data;
CreatBiTree(T->lchild);
CreatBiTree(T->rchild);
}
return T;
}
//比较两个二叉树的异同,相同为ture,不同为false
bool CmpBiTree(BiTree &T1,BiTree &T2)
{
//先判断,T1,T2是否为空
if (NULL==T1&&NULL==T2)
{
return true;
}
if (NULL==T1||NULL==T2)
{
return false;
}
if (T1->data!=T2->data)
{
return false;
}
//即认为左右子树交换后,认为同一个树
bool p=CmpBiTree(T1->lchild,T2->lchild);
bool q=CmpBiTree(T1->rchild,T2->rchild);
bool r=CmpBiTree(T1->lchild,T2->rchild);
bool s=CmpBiTree(T1->rchild,T2->lchild);
bool result=(p&&q)||(r&&s);</span>
return result;
}
int main()
{
//建立两个二叉树T1,T2
cout<<"请输入T1的数据:"<<endl;
BiTree T1=CreatBiTree(BiTree(NULL));//很重要的点
//BiTree T2=(BiTree)malloc(sizeof(BiTNode));
cout<<"请输入T2的数据"<<endl;
BiTree T2=CreatBiTree(BiTree(NULL));
bool p=CmpBiTree(T1,T2);
cout<<"两树是否相等:"<<p<<endl;
return 0;
}
或者以以下方式亦可:
关于二叉树的构造函数:
在主调函数中声明号指针所指向的空间,在被调函数中可以直接使用。
//二叉树的定义,以及比较
#include <iostream>
using namespace std;
//二叉树的二叉链表的节点定义
typedef struct BiTNode
{
int data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//创建二叉树
//若该节点的数据为空,则输入“-1”
BiTree CreatBiTree(BiTree T)
{
cout<<"请输入int型的数据,以-1作为空节点:"<<endl;
int data;
cin>>data;
if (-1==data)
{
T=NULL;
}
else
{
if (NULL==T)
{
cout<<"Failed to malloc a new BiTNode!"<<endl;
}
T->data=data;
T->lchild=(BiTree)malloc(sizeof(BiTNode));
T->rchild=(BiTree)malloc(sizeof(BiTNode));
CreatBiTree(T->lchild);
CreatBiTree(T->rchild);
}
return T;
}
//比较两个二叉树的异同,相同为ture,不同为false
bool CmpBiTree(BiTree &T1,BiTree &T2)
{
//先判断,T1,T2是否为空
if (NULL==T1&&NULL==T2)
{
return true;
}
if (NULL==T1||NULL==T2)
{
return false;
}
if (T1->data!=T2->data)
{
return false;
}
//即认为左右子树交换后,认为同一个树
bool p=CmpBiTree(T1->lchild,T2->lchild);
bool q=CmpBiTree(T1->rchild,T2->rchild);
bool r=CmpBiTree(T1->lchild,T2->rchild);
bool s=CmpBiTree(T1->rchild,T2->lchild);
bool result=(p&&q)||(r&&s);
return result;
}
int main()
{
//建立两个二叉树T1,T2
cout<<"请输入T1的数据:"<<endl;
BiTree T1=(BiTree)malloc(sizeof(BiTNode));
T1=CreatBiTree(T1);
cout<<"请输入T2的数据"<<endl;
BiTree T2=(BiTree)malloc(sizeof(BiTNode));
T2=CreatBiTree(T2);
bool p=CmpBiTree(T1,T2);
cout<<"两树是否相等:"<<p<<endl;
return 0;
}