关于二叉树结点实现随机访问问题

本文介绍了一种通过全局指针数组实现二叉树结点随机访问的方法。在先序创建二叉树的同时,将结点按顺序存入数组中,从而可以随机访问数组下标来达到访问任意结点的目的。文中提供了相应的C语言代码实现,包括创建、访问二叉树结点的函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于实现二叉树各个结点的随机访问 ( 修改删除和插入) 问题

算法分析:

先定义一个全局指针类型的数组*a[100]. 为了实现二叉树各结点的随机访问, 我们可以在按照某种序列( 例如: 先序) 创建的同时, 将生成的结点依次存入定义的指针类型数组中. 即各个结点的地址也按照某种序列( 先序 ) 顺序存入指针类型数组中.

在这里以先序创建为例

如图所示:

     1

/    \

 2       7

/  \    /  \

3  4   8   9

  /  \

 5   6

图中数字为以先序创建二叉树, 所创建各结点的顺序

对于各结点的地址也以此序列存入数组a中;

由于数组a可以实现随机访问;

此时只需要随机访问数组下标,即可实现各结点的随机访问

代码实现:

这里的访问为输出结点

#include<stdio.h>

#include<stdlib.h>

struct node {

         intLtag;

         structnode *Lchild;

         intdata;

         intRtag;

         structnode *Rchild;

}*pre,*top[20];

int i=0,j=0;

inta[20]={1,2,3,0,0,4,5,0,0,6,0,0,7,8,0,0,9,0,0};

int main()

{

         intk;

         voidcreat(struct node **root);

         structnode *root,*s,*h;

         creat(&root);

         printf("结点存放按先序创建并存放\n");

         printf("输入要访问的第i个结点:");

         scanf("%d",&i);

   if(i-1>9||i-1<0)

                   printf("输入有误!\n");//共创建了9个结点

         else{         

                   s=top[i-1];

                   printf("%d\n",s->data);

         }

         return0;

}

void creat(struct node **root)//先序创建二叉树

{

         if(a[i]==0){

                   *root=NULL;

                   i++;

         }

         else{

                   (*root)=(structnode *)malloc(sizeof(struct node ));

                   top[j]=(*root);                  //将新建结点存入数组top中

                   j++;                             //数组下标加1

                   (*root)->Ltag=(*root)->Rtag=0;

                   (*root)->data=a[i];//给结点赋值

                   i++;

                   creat(&(*root)->Lchild);

                   creat(&(*root)->Rchild);

         }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值