二叉树的相关算法(一)

1.求二叉树所有的节点数

2.求二叉树所有的叶子节点数

3.求二叉树最小值的节点值

4.求二叉树所有节点值之和

5.求二叉树节点值为x的个数

6.删除二叉树

//求二叉树所有的节点数
int nodes(BTNode *r){
    if(r==0)
        return 0;
    else
        return nodes(r->lchild)+nodes(r->rchild)+1;
} 

//求二叉树所有的叶子节点数
int leafNodes(BTNode *r){
    if(r==NULL)
        return 0;
    else if(r->lchild==NULL&&r->rchild==NULL)
        return 1;
    else
        return leafNodes(r->lchild)+leafNodes(r->rchild);
} 

//求二叉树最小值的节点值
void minNode(BTNode *r,elemType &min){
    if(r!=NULL){
        if(r->data<min)
            min=r->data;
        minNode(r->lchild,min);
        minNode(r->rchild,min);
    }
    
} 

//求所有节点值之和
int findSum(BTNode *r){
    if(r==NULL)
        return 0;
    else
        return r->data+findSum(r->lchild)+findSum(r->rchild);
} 

//求二叉树中节点值为x的节点个数
int findCount(BTNode *r,int x){
    if(r==NULL)
        return 0;
    if(x==r->data)
        return 1+findCount(r->lchild,x)+findCount(r->rchild,x);
    else
        return findCount(r->lchild,x)+findCount(r->rchild,x);    
    
} 

//删除二叉树
void delTree(BTNode *r){
    if(r!=NULL){
        delTree(r->lchild);
        delTree(r->rchild);
        free(r);
    }
} 
原文地址:https://www.cnblogs.com/hekuiFlye/p/9574361.html