二叉樹的二叉鏈表的存儲結構:
typedef?? char?? TElemType;
typedef?? struct??? BiTNode
{
???????????? TElemType data;//數據元素
???????????? BiTNode? *? lchild;//指向左孩子
????????????? BiTNode? *? rchild;//指向右孩子
}BiTNode,* BiTree;
一、二叉樹的深度
如果二叉樹為空,結點的深度為0;
如果二叉樹只有一個結點G為例,其中,它的左右子樹的深度為0;而這種情況二叉樹的深度為1。
如果二叉樹有兩個結點D,G為例,其中,以D為根結點的二叉樹的左子樹的深度為0,右子樹的深度為(0+1);而這種情況二叉樹的深度為2。
…………
如果二叉樹有n個結點,二叉樹的深度為二叉樹左右子樹深度的最大值+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);
??????????????????????? }
}
二、二叉樹的葉子結點數
如果二叉樹為空,二叉樹的葉子結點數為0;
如果二叉樹只有一個結點G(左右子樹為空)為例,而這種情況二叉樹的葉子結點數為1。
如果二叉樹有兩個結點D(右子樹為非空),G(左右子樹為空)為例,其中,以D為根結點的二叉樹的左子樹的葉子結點數為0,右子樹的葉子結點數為1;而這種情況二叉樹的葉子結點數為1。
…………
如果二叉樹有n個結點,二叉樹的葉子結點數為二叉樹左右子樹葉子結點數的和。
代碼:
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;
??????????????????????????????? }
}
三、二叉樹的結點數
如果二叉樹為空,二叉樹的結點數為0;
如果二叉樹只有一個結點G(左右子樹為空)為例,而這種情況二叉樹的結點數為1。
如果二叉樹有兩個結點D(右子樹為非空),G(左右子樹為空)為例,其中,以D為根結點的二叉樹的左子樹的結點數為0,右子樹的結點數為1;而這種情況二叉樹的結點數為2。
…………
如果二叉樹有n個結點,二叉樹的結點數為二叉樹左右子樹結點數的和+1(根結點)。
代碼:
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;
????????????????????? }
}