数据结构---基础知识(12):二叉树算法补充
复制二叉树
【算法步骤】
如果是空树,递归结束,否则进行以下操作:
- 申请一个新结点空间,复制根结点;
- 递归复制左子树;
- 递归复制右子树。
c
void Copy(BiTree T,BiTree &NewT)
{//复制一棵和T完全相同的二叉树
if(T==NULL)//如果是空树,递归结束
{
NewT=NULL;
return;
}
else
{
NewT=new BiTNode;
NewT->data=T->data;//复制根结点
Copy(T->lchild,NewT->lchild);//递归复制左子树
Copy(T->rchild,NewT->rchild);//递归复制右子树
}//else
}
计算二叉树的深度
【算法步骤】
如果是空树,递归结束,深度为0,否则进行以下操作:
- 递归计算左子树的深度记为m;
- 递归计算右子树的深度记为n;
- 如果m大于n,二叉树的深度为m+1,否则为n+1
c
int Depth(BiTree T)
{//计算二叉树T的深度
if(T==NULL) return 0;//如果是空树,深度为0,递归结束
else
{
m=Depth(T->lchild);//递归计算左子树的深度记为m
n=Depth(T->rchild);//递归计算右子树的深度记为n
if(m>n) return(m+1);//二叉树的深度为m与n的较大者加1
else return(n+1)
}
}
统计二叉树中结点的个数
c
int NodeCount(BiTree T)
{//统计二叉树T中结点的个数
if(T==NULL) return 0;//如果是空树,则结点个数为0,递归结束
else return NodeCount(T->lchild)+NodeCount(T->rchild)+1
//否则结点个数为左子树的结点个数+右子树的结点个数+1
}
统计二叉树叶子结点个数
c
int LeafNode(BiTree T)
{//统计二叉树T中叶子结点的个数
if(T==NULL)
return 0;//空树,返回0
else if(T->lchild==NULL&&T->rchild==NULL)
return 1;//叶子结点,返回1
else//递归
return LeafNode(T->lchild)+LeafNode(T->rchild)
}