树的三种基本操作

求叶子结点的数目

用任何一种递归算法 凡是左右指针均为空的 是叶子 统计数目即可

int sum=0;
void countLeaf(BiTNode *T,int *sum)
{
    if(!T)
    {
        if(!T->lchild && !T->rchild)
        {
            (*sum)++;    //指针指向的数据+1
        }
        if(T->lchild)
        {
            countLeaf(T->lchild,sum);
        }
        if(T->rchild)
        {
            countLeaf(rchild,sum);
        }
    }
}

copy二叉树

BiTNode * CopyTree(BiTNode *T)
{
    BiTNode *newNode = NULL:
    BiTNode *newLp = NULL;
    BiTNode *newRp = NULL;
    if(!T)
    { 
        return NULL;
    }
    //copy 左子树
    if(!T->lchild)
    {
        newLp = CopyTree(T->lchild); //copy左子树
    }
    else
    {
        newLp = NULL;
    }

    //copy 右子树
    if(!T-> rchild)
    {
        newRp = CopyTree(T->rchild);
    }
    else
    {
        newRp = NULL;
    }
    
    //malloc根节点
    newNode =(BiTnode*) malloc(sizeof(BiTNode));
    if(newNode == NULL)
    {
        return NULL;
    }
    newNode->lchild = newLp;
    newNode->rchild = newRp;
    newNode->data = T->data;
    return newNode;
}

求树的深度

int Depth(BiTNode *T)
{
    int deptleft = 0;
    int deptright =0;
    int deptvalue = 0;
    
    if(!T)
    {
        deptvalue = 0;
        return deptvalue;
    }
    deptleft = Depth(T->lchild);
    deptright = Depth(T->rchild);
    deptvalue = 1 + (deptleft>deptright?deptleft:deptright) ;
    return deptvalue;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

。✧* ꧁流痕꧂✧*。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值