<strong>二叉树链表递归的实现都是以3种遍历为基础的</strong>
/** 二叉树深度的递归算法 */
int depth(BTree root)
{
int ldepth,rdepth;
if(!root) return 0;
else{
ldepth = depth(root->lchild);
rdepth = depth(root->rchild);
return ldepth>rdepth?ldepth+1;rdepth+1;
}
}
void DestroyBiTree(BiTree &T)
{ // 初始条件: 二叉树T存在。操作结果: 销毁二叉树T
if(T) // 非空树
{
if(T->lchild) // 有左孩子
DestroyBiTree(T->lchild); // 销毁左孩子子树
if(T->rchild) // 有右孩子
DestroyBiTree(T->rchild); // 销毁右孩子子树
free(T); // 释放根结点
T=NULL; // 空指针赋0
}
}
二叉树的销毁必须使用后序遍历
求叶子结点数
[cpp] view plaincopy
int get_num_of_leave(bitree bt)
{
if (!bt)
return 0;
else if (!bt->lchild && !bt->rchild)
return 1;
else
return (get_num_of_leave(bt->lchild) + get_num_of_leave(bt->rchild));
}
递归交换二叉树的子女
/交换二叉树的左右子女
void exchangeChild(BiTree &T)
{
if(T)
{
BiTree temp = NULL;
if(T->lchild ||T->rchild)
{
temp = T->lchild;
T->lchild = T->rchild;
T->rchild = temp;
exchangeChild(T->lchild);
exchangeChild(T->rchild);
}
}
}