首页 > 编程知识 正文

二叉树的遍历算法图解,二叉树的遍历c语言代码

时间:2023-05-05 06:14:54 阅读:154834 作者:4609

数据结构——生成二叉树链表生成二叉树一、思想(超前思想生成)二、生成二叉树(1)传递一次参数的方法(2)传递二次参数的方法

一、思想(开创先锋思想) :

第一步是首先创建根节点,然后创建根节点左侧的子树。 直到递归创建的节点下不再创建左侧子树,也就是说,当前递归创建的节点下的左侧子树指向NULL,结束此左侧子树的递归,返回到该节点的上一个节点,创建右侧子树,然后创建下一个递归创建左侧子树后,创建右侧子树直到递归结束并返回到更高级别的指针节点(即根节点)下,根节点左侧的子树将开始创建右侧子树。 这与在根节点左侧创建左右子树的原理相同

二、做二叉树的操作通常使用递归的方法,如果递归不太清楚,建议学习这个进行练习。 二叉树的操作可以分为两种。 一个是需要改变二叉树的结构。 例如,二叉树的创建、节点的删除等。 在这样的操作中,被传递的二叉树的节点参数是二叉树指针的地址。 这样的输入,便于变更二叉树结构的指针=地址。 这里有点绕远,可能需要多考虑一下

这是一个由两股创建的函数,如下所示: 此处的节点值为整数,如果输入的数量为-1,则表示操作将结束,以继续创建子节点。 然后,使用递归方法确定左子树和右子树二叉树结构体初始化

为了便于使用二叉树结构,可以使用typedef为结构命名

typedef struct Tree{ int data; //存储数据域struct Tree *lchild遍历左子树指针struct Tree *rchild; //遍历右子树指针}Tree,*BitTree; 本节介绍了如何创建两种传授类型。 其中,深层含义可以多次参照和理解,加深对指针的理解

(1)传递一次参数的方法BitTree CreateLink () {int data; int temp; BitTree T; Scanf('%d ',data ); //输入数据temp=getchar (; //吸收空间if (data==-1 ) ) /输入-1表示此节点下的子树没有保存数据,也就是说不会继续递归创建return NULL。 }else{t=(bittree ) malloc (sizeof ) tree ); //分配内存空间的T-data=data; //请将当前输入的数据输入到当前节点指针的数据字段中printf('%d的左子树:”,data ); T-lchild=CreateLink (; //开始左侧子树printf的递归生成(' %d的右侧的子树: )、数据); T-rchild=CreateLink (; //开始在上级节点右侧递归地生成左右子树return T; ///返回根节点}(2)辅助参数方法bittreecreatelink(bittree*t ) /次数t是指向根节点的指针的地址({int data; Scanf('%d ',data ); if(data==-1 ) {*T=NULL; //在结束递归时,将指针指向当前节点的指针地址的指针返回到空else { * t=(bit tree ) malloc(sizeof ) tree ); //为指向节点指针地址的指针分配存储器if ()! (t ) )/) t=null表示内存分配失败,即完成了递归printf的创建('内存分配失败n ' ); exit(-1; () t )-data=data; //在节点指针的地址中的数据字段中,显示数据printf (存储在中) (左部分树: )、data ); 创建链接() t )-lchild ); //请输入%d作为左侧的子树printf ('右侧的子树: )、data; 创建链接() t )-rchild; //开始遍历右边的子树,在遍历的思想文章的开头说明}} (1)一级参数完整例子:

# include stdio.h # include stdlib.htypedefstructtree { int data; //存储数据域struct Tree *lchild遍历左子树指针struct Tree *rchild; //右子树指针(}Tree,*BitTree; BitTree CreateLink () {int data; int temp; BitTree T; Scanf('%d ',data ); //输入数据temp=getchar (; //吸收空间if (data==-1 ) ) /输入-1表示此节点下的子树没有保存数据,也就是说不会继续递归创建return NULL。 }else{t=(bittree ) malloc (sizeof ) tree ); //分配内存空间的T-data=data; //请将当前输入的数据输入到当前节点指针的数据字段中printf('%d的左子树:”,data ); T-lchild=CreateLink (; //开始左侧子树printf的递归生成(' %d的右侧的子树: )、数据); T-rchild=CreateLink (; //开始在上级节点右侧递归地生成左右子树return T; //返回根节点}}voidshowxianxu(bittreet )//二叉树(if ) t==null ) {return; }printf('%d”,T-data ); showxianxu(t-lchild; //递归遍历左子树showxianxu(t-rchild ); //递归遍历右子树(}int main ) ) {BitTree S; printf ('请输入第一个节点的数据:n '; S=CreateLink (; //接受已完成二叉树创建的根节点showxianxu(s ); //先遍历二叉树return 0; } (2)二级参数完整例子

# include stdio.h # include stdlib.htypedefstructtree { int data; struct Tree *lchild; struct Tree *rchild; }Tree,*BitTree; bittreecreatelink(bittree*t ) /次数t是指向根节点的指针的地址({int data; Scanf('%d ',data ); if(data==-1 ) {*T=NULL; //在结束递归时,将指针指向当前节点的指针地址的指针返回到空else { * t=(bit tree ) malloc(sizeof ) tree ); //为指向节点指针地址的指针分配存储器if ()! (t ) )/) t=null表示内存分配失败,即完成了递归printf的创建('内存分配失败n ' ); exit(-1; () t )-data=data; //在节点指针的地址中的数据字段中,显示数据printf (存储在中) (左部分树: )、data ); 创建链接() t )-lchild ); //请输入%d作为左侧的子树printf ('右侧的子树: )、data; 创建链接() t )-rchild; //开始遍历右部分树,在遍历的思想文章的开头说明}}voidshowxianxu(bittreet )//二叉树(if ) t==null ) ) {return; }printf('%d”,T-data ); showxianxu(t-lchild; //左子树showxianxu(t-rchild ); //右边的子树(}int main ) ) {BitTree *S; //请输入指向此结构的指针地址的指针printf (第一个节点的数据:n ); createlink(s; //二级指针地址showxianxu(s ); 返回0; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。