從小白開始學習樹,二叉樹 (本文C )

2021-09-25 14:00:06 字數 2474 閱讀 5093

d.childnode*鍊錶

1.a的左孩子為b,沒有兄弟

2.b的左孩子為e,右兄弟為c

3.e的左孩子為k,右兄弟為f

以此類推得二叉樹:

其中#表示null

如果先序遍歷,結果為:124###3##

//遞迴的建立

node* createtree()

else

return root;

}

既然我們已經建立出一棵屬於自己的二叉樹了,那我們就要看看它長什麼樣子

以此圖為例

//遞迴遍歷

void show(node* root)

cout << root->c;// 根

show(root->lchild);// 左

show(root->rchild);// 右

}

調換上面**的順序就可以達到不同型別的遍歷

中序:

void show(node* root)

show(root->lchild); // 左

cout << root->c; // 根

show(root->rchild);// 右

}

上面已經說過葉子節點是:終節點(沒有後繼);

大家很顯然就能看得出這棵樹的葉子節點是3

那麼我們就**遞迴判斷節點的左右子節點是否為空**就ok

void getleafnode(node* root,int* count)     // count用來計數

if (root->lchild == null && root->rchild == null)

getleafnode(root->lchild,count);

getleafnode(root->rchild,count);

}

高度和深度是相反的表示,深度是從上到下數的,而高度是從下往上數

我們先來看看高度和深度的定義,某節點的深度是指從根節點到該節點的最長簡單路徑邊的條數,而高度是指從該節點到葉子節點的最長簡單路徑邊的條數。

注意:這裡邊的條數是規定根節點的深度和葉子節點的高度是0;

所以樹的深度和高度是相等的,而對其他節點來說深度和高度不一定相等。

很多教材或者書對深度的起點有不同的說法,有的說法是從0,開始,有的是從1開始

這裡我們從1開始

可以看出次樹的深度和高度為4

int getdepth(node* root)

return 1 + max(getdepth(root->lchild), getdepth(root->rchild));

}

線索二叉樹:

哈夫曼樹:

二叉搜尋(排序)樹;

平衡二叉樹:

b樹~b+樹:

紅黑樹:

樹 二叉樹 滿二叉樹 完全二叉樹 完滿二叉樹

目錄名稱作用根 樹的頂端結點 孩子當遠離根 root 的時候,直接連線到另外乙個結點的結點被稱之為孩子 child 雙親相應地,另外乙個結點稱為孩子 child 的雙親 parent 兄弟具有同乙個雙親 parent 的孩子 child 之間互稱為兄弟 sibling 祖先結點的祖先 ancesto...

二叉樹 二叉樹

題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...

二叉樹,完全二叉樹,滿二叉樹

二叉樹 是n n 0 個結點的有限集合,它或者是空樹 n 0 或者是由乙個根結點及兩顆互不相交的 分別稱為左子樹和右子樹的二叉樹所組成。滿二叉樹 一顆深度為k且有2 k 1個結點的二叉樹稱為滿二叉樹。說明 除葉子結點外的所有結點均有兩個子結點。所有葉子結點必須在同一層上。完全二叉樹 若設二叉樹的深度...