六.Tree(樹)
6.1二叉樹的創建
理解了樹的創建過程,對遞歸的理解就會更上一層樓。
(1)樹結構的聲明
# define OK 1
typedef struct bintree
{
struct bintree *lchild;
char data;
struct bintree *rchild;
}BiNode, *BiTree;
BiTree t;//頭結點指針
int bintree_creat(BiTree *q)
{
char n;
n = getchar();
if(n == '#')
*q = NULL;
else
{
(*q) = (BiTree )malloc(len);
(*q)->data = n;
bintree_creat(&(*q) -> lchild);
bintree_creat(&(*q) -> rchild);
}
return OK;
}
(3)反思:源代碼中BiTree *q,(&(*q) -> lchild),令人難以理解。這源於人們對循環的理解(科學證明,正常人容易理解3層以內循環)。這時,C++的 & 運算符就簡潔明瞭,容易理解了。
int bintree_creat(BiTree &q)
{
char n;
n = getchar();
if(n == '#')
q = NULL;
else
{
q = (BiTree )malloc(len);
q->data = n;
bintree_creat(q -> lchild);
bintree_creat(q -> rchild);
}
return OK;
}
(4)檢驗。
二叉樹建立完成,到底成功了沒,我們不知道。那就遍歷一下嘍,見下一章6.2二叉樹的遍歷(含建立的完整源代碼)。
初次接觸C++的&時不理解爲什麼引入 &(refrence),既然有了指針 * ,不都能解決 了嗎?C寫多了,發現(1)&確實比*安全;(2)&更人性化,使程序編寫簡單,更易理解。