二叉樹(shù)的二叉鏈表的存儲(chǔ)結(jié)構(gòu):
typedef?? char?? TElemType;
typedef?? struct??? BiTNode
{
???????????? TElemType data;//數(shù)據(jù)元素
???????????? BiTNode? *? lchild;//指向左孩子
????????????? BiTNode? *? rchild;//指向右孩子
}BiTNode,* BiTree;
一斥扛、二叉樹(shù)的深度
如果二叉樹(shù)為空涣达,結(jié)點(diǎn)的深度為0;
如果二叉樹(shù)只有一個(gè)結(jié)點(diǎn)G為例,其中帘睦,它的左右子樹(shù)的深度為0;而這種情況二叉樹(shù)的深度為1坦康。
如果二叉樹(shù)有兩個(gè)結(jié)點(diǎn)D竣付,G為例,其中滞欠,以D為根結(jié)點(diǎn)的二叉樹(shù)的左子樹(shù)的深度為0古胆,右子樹(shù)的深度為(0+1);而這種情況二叉樹(shù)的深度為2。
…………
如果二叉樹(shù)有n個(gè)結(jié)點(diǎn),二叉樹(shù)的深度為二叉樹(shù)左右子樹(shù)深度的最大值+1逸绎。
代碼:
int Depth(BiTree T)
{
???????????????????? int m,n;
???????????????????? if(!T)??????????????????????????????????????????????? ?? return 0;
???????????????????? if(!T->lchild && !T->rchild) ? ? ? ? ? return 1;
???????????????????? else
???????????????????? {
??????????????????????????????????? m = Depth(T->lchild);
??????????????????????????????????? n = Depth(T->rchild);
???????????????????????????????????? return 1+(m>n?m:n);
??????????????????????? }
}
二、二叉樹(shù)的葉子結(jié)點(diǎn)數(shù)
如果二叉樹(shù)為空棺牧,二叉樹(shù)的葉子結(jié)點(diǎn)數(shù)為0巫糙;
如果二叉樹(shù)只有一個(gè)結(jié)點(diǎn)G(左右子樹(shù)為空)為例,而這種情況二叉樹(shù)的葉子結(jié)點(diǎn)數(shù)為1颊乘。
如果二叉樹(shù)有兩個(gè)結(jié)點(diǎn)D(右子樹(shù)為非空)参淹,G(左右子樹(shù)為空)為例,其中乏悄,以D為根結(jié)點(diǎn)的二叉樹(shù)的左子樹(shù)的葉子結(jié)點(diǎn)數(shù)為0浙值,右子樹(shù)的葉子結(jié)點(diǎn)數(shù)為1;而這種情況二叉樹(shù)的葉子結(jié)點(diǎn)數(shù)為1纲爸。
…………
如果二叉樹(shù)有n個(gè)結(jié)點(diǎn),二叉樹(shù)的葉子結(jié)點(diǎn)數(shù)為二叉樹(shù)左右子樹(shù)葉子結(jié)點(diǎn)數(shù)的和亥鸠。
代碼:
int CountLeaf(BiTree T)
{
???????????????????????????? int m,n;
???????????????????????????? if(!T)???????????????????????????????????????????????????????????? return 0;
????????????????????????????? if(!T->lchild && !T->rchild) ? ? ? ? ? ? ? ? ? return 1;
????????????????????????????? else
???????????????????????????? {
??????????????????????????????????????????? m = CountLeaf(T->lchild);
?????????????????????????? ? ? ? ? ? ? ? ? ? n = CountLeaf(T->rchild);
???????????????????????? ? ? ? ? ? ? ? ? ? ? return m+n;
??????????????????????????????? }
}
三、二叉樹(shù)的結(jié)點(diǎn)數(shù)
如果二叉樹(shù)為空识啦,二叉樹(shù)的結(jié)點(diǎn)數(shù)為0负蚊;
如果二叉樹(shù)只有一個(gè)結(jié)點(diǎn)G(左右子樹(shù)為空)為例,而這種情況二叉樹(shù)的結(jié)點(diǎn)數(shù)為1颓哮。
如果二叉樹(shù)有兩個(gè)結(jié)點(diǎn)D(右子樹(shù)為非空)家妆,G(左右子樹(shù)為空)為例,其中冕茅,以D為根結(jié)點(diǎn)的二叉樹(shù)的左子樹(shù)的結(jié)點(diǎn)數(shù)為0伤极,右子樹(shù)的結(jié)點(diǎn)數(shù)為1;而這種情況二叉樹(shù)的結(jié)點(diǎn)數(shù)為2姨伤。
…………
如果二叉樹(shù)有n個(gè)結(jié)點(diǎn),二叉樹(shù)的結(jié)點(diǎn)數(shù)為二叉樹(shù)左右子樹(shù)結(jié)點(diǎn)數(shù)的和+1(根結(jié)點(diǎn))哨坪。
代碼:
int Count(BiTree T)
{
?????????????????????? int m,n;
?????????????????????? if(!T) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? return 0;
??????????????????????? if(!T->lchild && !T->rchild)??????????? return 1;
??????????????????????? else
?????????????????????? {
?????????????????????????? ? ? ? ?? m = Count(T->lchild);
????????????????????????????????? ? n = Count(T->rchild);
??????????????????????????????????? return m+n+1;
????????????????????? }
}