6.1二叉樹的創建

六.Tree(樹)

6.1二叉樹的創建

理解了樹的創建過程,對遞歸的理解就會更上一層樓。

(1)樹結構的聲明

# define OK 1
typedef struct bintree
{
	struct bintree *lchild;
	char data;
	struct bintree *rchild;
}BiNode, *BiTree;
BiTree t;//頭結點指針


(2)有了樹結構我們就能先序創建二叉樹了(注意遞歸)
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)&更人性化,使程序編寫簡單,更易理解。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章