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個結點的二叉樹稱為滿二叉樹。說明 除葉子結點外的所有結點均有兩個子結點。所有葉子結點必須在同一層上。完全二叉樹 若設二叉樹的深度...