二叉树的其他操作

二叉树的操作

  • 树中节点的数目
    int Size(bt_node *ptr)  // 树中所有节点的数目
    {
      if(ptr == NULL) 
          return 0;
      else
          return 1+Size(ptr->leftchild)+Size(ptr->rightchild);
    }
    int SizeLeaf(bt_node *ptr)  // 树中叶子节点的数目
    {
      if(ptr == NULL)
          return 0;
      else if(ptr->leftchild == NULL && ptr->rightchild == NULL)
      {
          return 1;
      }else 
      {
          return SizeLeaf(ptr->leftchild)+SizeLeaf(ptr->rightchild);
      }
    }
    int SizeOneBranch(bt_node *ptr)  // 树中单分支节点的数目
    {
      if(ptr == NULL)
          return 0;
      else if((ptr->leftchild != NULL && ptr->rightchild == NULL)||ptr->leftchild == NULL && ptr->rightchild != NULL))
      {
          return 1;
      }else 
      {
          return SizeLeaf(ptr->leftchild)+SizeLeaf(ptr->rightchild);
      }
    }
    int SizeTwoBranch(bt_node *ptr)  // 树中双分支节点的数目
    {
      if(ptr == NULL)
          return 0;
      else if(ptr->leftchild != NULL && ptr->rightchild != NULL)
      {
          return 1;
      }else 
      {
          return SizeLeaf(ptr->leftchild)+SizeLeaf(ptr->rightchild);
      }
    }
    
  • 树的深度
    int Max(int a,int b)
    {
      return a>b? a:b;
    }
    int Depth(bt_node *ptr)
    {
      if(ptr == NULL)
      {
          return 0;
      }else
      {
          return Max(Depth(ptr->leftchild),Depth(ptr->rightchild)) + 1;
      }
    }
    
  • 寻找父亲节点
    bt_node * Parent(bt_node *ptr,bt_node *child)
    {
      if(ptr == NULL || ptr->leftchild == child || ptr->rightchild == child)
      {
          return ptr;
      }else
      {
          bt_node *p = Parent(ptr->leftchild,child);
          if(NULL == p)
          {
              p = Parent(ptr->rightchild,child);
          }
          return p;
      }
    }
    bt_node * FindParet(bt_node *ptr,bt_node *child)
    {
      if(ptr == NULL || child == NULL || ptr == child)
      {
          return NULL;
      }else
      {
          return Parent(ptr,child);
      }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值