首页 新闻 搜索 专区 学院

解释二叉树的问题

0
[待解决问题]

为什么在创建二叉树的函数中形参为&T,而不是T

问题补充:
@热风 2017/05/03 07:50:29
#include <iostream>
using namespace std;
struct BiTree
{
char data;
BiTree *lchild, *rchild;
};
void CreateBiTree(BiTree*&T)//创建二叉树
{
char ch;
cin >> ch;
if (ch == '#')
T = NULL;
else
{
T = new BiTree;
T->data = ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
void firstordertravel(BiTree *T)//先序遍历二叉树
{
if (T)
{
cout << T->data;
firstordertravel(T->lchild);
firstordertravel(T->rchild);
}
}
void Inordertravel(BiTree *T)//中序遍历二叉树
{
if (T)
{
Inordertravel(T->lchild);
cout << T->data;
Inordertravel(T->rchild);
}
}
void lastordertravel(BiTree *T)//后序遍历二叉树
{
if (T)
{
lastordertravel(T->lchild);
lastordertravel(T->rchild);
cout << T->data;
}
}
void Copy(BiTree *T1, BiTree*&T2)//复制二叉树
{
if (T1)
{
T2 = new BiTree;
T2->data = T1->data;
Copy(T1->lchild, T2->lchild);
Copy(T1->rchild, T2->rchild);
}
else
T2 = NULL;
}
int Depth(BiTree *T)//计算二叉树的深度
{
int m, n;
if (T == NULL) return 0;
else
{
m = Depth(T->lchild);
n = Depth(T->rchild);
if (m > n)
return m+1;
else
return n+1;
}
}
int NodeCount(BiTree *T)//统计二叉树中结点的个数
{
if (T == NULL) return 0;
else return  NodeCount(T->lchild) + NodeCount(T->rchild) + 1;
}
void main()
{
BiTree *T1, *T2;
cout << "请先序输入T1二叉树:";
CreateBiTree(T1);
Copy(T1, T2);
cout << "先序遍历T1二叉树:";
firstordertravel(T1);
cout << endl;
cout << "中序遍历T1二叉树:";
Inordertravel(T1);
cout << endl;
cout << "后序遍历T1二叉树:";
lastordertravel(T1);
cout << endl;
cout << "先序遍历T2二叉树:";
firstordertravel(T2);
cout << endl;
cout << "T1的深度:" << Depth(T1) << endl;
cout << "T1的结点个数:" << NodeCount(T1) << endl;
}
创新思的主页 创新思 | 菜鸟二级 | 园豆:208
提问于:2017-04-19 09:50
< >
分享
所有回答(1)
0

问问题请附带源码

牧师/preacher | 园豆:500 (菜鸟二级) | 2017-04-19 13:53

如果上面的图你能看懂,估计问题你也想明白了,我只解释这半段程序,希望对你有帮助

void CreateBiTree(BiTree*&T)//创建二叉树
{
    char ch;
    cin >> ch;
    if (ch == '#')
        T = NULL;
    else
    {
        T = new BiTree;
        T->data = ch;
        CreateBiTree(T->lchild);
        CreateBiTree(T->rchild);
    }
}

假设这个函数CreateBiTree传入的是(看图)0x00001000,你之后做的T = new BiTree;new BiTree生成了Tree1;T = Tree1将Tree1的首地址0x00001005放入地址0x00001000中。

仔细想一想,应该不难理解。

支持(0) 反对(0) 牧师/preacher | 园豆:500 (菜鸟二级) | 2017-05-04 09:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册