二叉树的一些算法

(1) 求二叉树结点数目的算法.

typedef struct node
 {
  char data;
  struct node *lchild,*rchild;
 }NODE;
 int nodenumber(NODE *root)
 {
  if(root<=NULL)return(0);
  else return(1+nodenumber(root->lchild)+nodenuber(root->rchild);
 }
(2) 输出二叉树所有叶子的算法.

void showleaves(NODE *root)
 {
  if(root==NULL)return;
  if(root->lchild==NULL&&root->rchild==NULL)
  { printf("%c",root->data);
    return;
   }
  else if(root->lchild!=NULL)showleaves(root->lchid);
  if(root->rchild!=NULL)showleaves(root->rchild);
 }
(3) 求二叉树深度的算法.

int Treedepth(NODE *root)
 { if(root->NULL)return(-1);
   if(root->lchild==NULL&&(root->rchild==NULL)return(0);
   else return(Treedepth(root->lchild)>Treedepth(root->rchild)?
   (1+Treedepth(root->lchild)):(1+Treedepth(root->rchild));
 }

(4) 将树中所有节点的左右子树交换的算法.

void Treeswap(NODE *root)
 {
  if(root==NULL|(root->lchild==NULL&&root->rchild==NULL)return;
  p=root->lchild;
  root->lchild=root->rchild;
  root->rchild=p;
  Treeswap(root->lchild);
  Treeswap(root->rchild);
(5) 按层次顺序(同一层次从左到右)遍历二叉树的算法.

void levorder(t,m)
 NODE *t;
 int m;
 {  NODE *q[100],*p;
   int head,tail,i;
   q[0]=t;
   head=0;
   tail=1;
   while(head<tail)
   {  p=q[head++];
      printf("%c",p->data);
      for(i=0;i<m;i++)]
      if(p->child[i]!=NULL)
      q[tail++]=p->child[i];
    }
  }
(6) 复制这棵二叉树的算法.

NODE*copytree(NODE *root)
  NODE *p
 { if(root==NULL)return(NULL);
   else p=(NODE*)malloc(sizeof(NODE));
   p->data=root->data;
   p->lchild=copytree(root->lchild);
   p->rchild=copytree(root->rchild);
   return(p);
  }

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值