二叉树的创建与遍历

这篇具有很好参考价值的文章主要介绍了二叉树的创建与遍历。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

{用先序讲解举例,请自己联系中序和后序(在最后):}

(在自己作为儿子的同时自己也是根)

注意:递归的形参不是你看到的形参,而是逻辑上的形参!

首先是创建的函数,如果我们要先序输入这样一个二叉树:那么我们在计算机内部其实是要先序输入:ab##c##的,【这里的‘#’用来表示没有数值了,把传入的形参置空NULL】

二叉树的创建与遍历

所以create创造函数里面的if-else语句第一次走else建立根结点,然后进入T->lchild

(        p->lchild=create(p->lchild,name,index);        ),递归这个函数,左儿子判断为b,所以进入else,又递归(        p->lchild=create(p->lchild,name,index);        )语句,判断为‘#’,进入if,说明这次的结点应该是空的,return NULL; 回到递归上一级的地方执行(        p->rchild=create(p->rchild,name,index);        ),这个函数的递归上一级是b的rchild,所以把b->rchild置空,回到再再上一级,也就是a的那一层,进入a->rchild...

 以上是创建,遍历的时候,因为之前的函数是把地址置空,所以,在遍历函数中if的判断也是对当前形参的地址进行操作的。

二叉树的创建与遍历

 

/*二叉树的实现【创建与遍历】*/
#include<stdio.h>
#include<stdlib.h>
typedef struct Bigtree{
	char data;
	struct Bigtree *lchild;
	struct Bigtree *rchild;
}Bigtree;

Bigtree* create(Bigtree *T,char name[],int *index);
void preoder(Bigtree *T);


int main(){
	Bigtree *T;
	char name[50]={"ab##c##"};
	
	int index=0;
	T=create(T,name,&index);		
	printf("\n先序遍历为:");				
	preoder(T);
	
	return 0;
} 


//创建[先序创建]
Bigtree* create(Bigtree *T,char name[],int *index)			//不改变n的值,所以不是int* n 
{
	char ch; 
	ch=name[*index];
	//(*index)++;
	Bigtree *p=T;	
	if(name[(*index)]=='#'){	
		*index+=1;							
		p=NULL;									  //T是形参,每一次传的参数不一样! 
		return p;								 //记得‘#’要返回空 
	}else{
		p=(Bigtree*)malloc(sizeof(Bigtree));
		p->data=ch;
		*index+=1;
		p->lchild=create(p->lchild,name,index);
		p->rchild=create(p->rchild,name,index);
	}
	return p;
}

//先序遍历
int i=0;
void preoder(Bigtree *T)
{
	//printf("\norderT,[%d]==%p",++i,T);
	if(T==NULL){
		return;
	}else{
		printf("%c  ",T->data);
		preoder(T->lchild);
		preoder(T->rchild);
	}
	
} 


-------------------------------分割线------------------------

中序与后序遍历的代码:文章来源地址https://www.toymoban.com/news/detail-423651.html


//中序遍历
void inoder(Bigtree *T)
{
	if(T==NULL){
		return;
	}else{
		preoder(T->lchild);
		printf("%c  ",T->data);
		preoder(T->rchild);
	}
	
} 
//后序遍历
void underoder(Bigtree *T)
{
	if(T==NULL){
		return;
	}else{
		preoder(T->lchild);
		preoder(T->rchild);
		printf("%c  ",T->data);
	}
	
} 

到了这里,关于二叉树的创建与遍历的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言二叉树的创建与遍历

    二叉树(binary tree)是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树。二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树。以下是对链式存

    2024年02月05日
    浏览(33)
  • 【数据结构】二叉树的创建和遍历(先序、中序、后序)

    最近一段时间学习了数据结构中二叉树的基本操作,包括二叉树的结构、二叉树的创建、递归先序中序后序遍历、非递归遍历等,想着把二叉树的相关知识和自己的见解放到网上来让网友看看是否正确,想和网友一起共同交流。 先了解一下二叉树的三个基本性质: 性质1:在

    2024年02月04日
    浏览(35)
  • 数据结构——二叉树的创建与遍历(链式存储结构)

    二叉树(binary tree)是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树。二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树。以下是对链式存

    2024年02月05日
    浏览(42)
  • 按照前序遍历创建二叉树及树的四种遍历方式

    一.二叉树的介绍         二叉树的特点是二叉树的每个结点的度都不大于2,可以视为每个结点都有左孩子和右孩子。故二叉树结点的数据结构为   二.二叉树的特点     1.设根结点所在的层数为第1层,则第i层最多有个结点。     2.深度为k的二叉树最多有个结点。    

    2024年02月04日
    浏览(31)
  • 【数据结构】二叉树的创建和四种遍历(附带详细注释)

    《数据结构系列首页》是数据结构系列文章的首页,其中会 逐步更新 各种数据结构的实现,有兴趣的选手可以一看。 首页中不仅有各种数据结构的实现,还有学习数据结构 必备的基础知识 ,如果有选手觉得自己的基础不太牢固,可以先将搞定基础知识,之后再攻克数据结

    2024年02月05日
    浏览(58)
  • 【算法与数据结构】二叉树的三种遍历代码实现(上)—— 用递归序知识点讲解

      本篇博客 (上篇) 先带大家学习 递归方式 进行三种遍历, 而在后续的 (下篇) 中将为大家详细讲解非递归的三种遍历方式。 目录 1、二叉树 2、二叉树的递归遍历 2.1、先序遍历 2.2、中序遍历 2.3、后序遍历  二叉树(Binary tree)是树形结构的一个重要类型。许多实际问

    2024年02月08日
    浏览(32)
  • c语言二叉树的创建与前序、中序、后序遍历(超详细)学习笔记

    我学习数据结构的方式是看书加看视频,视频看的是哔哩哔哩up主的数据结构-二叉树的创建与遍历  我总结并补充他所讲的内容,他的视频适合有c语言基础的看。 我的文章有点长,希望你能够耐心看完,一定一定会有所收获的! 递归思路演示: 输入AB##C## 创建结构体指针

    2024年02月04日
    浏览(28)
  • 【二叉树part01】| 二叉树的递归遍历、二叉树的迭代遍历、二叉树的统一迭代遍历

    目录 ✿二叉树的递归遍历❀ ☞LeetCode144.前序遍历 ☞LeetCode145.二叉树的后序遍历  ☞LeetCode94.二叉树的中序遍历  ✿二叉树的迭代遍历❀  ☞LeetCode144.前序遍历  ☞LeetCode145.二叉树的后序遍历   ☞LeetCode94.二叉树的中序遍历  ✿二叉树的统一迭代遍历❀   ☞LeetCode144.前序遍

    2024年02月09日
    浏览(29)
  • 14-数据结构-二叉树的创建以及前中后遍历,以及结点和叶子节点的计算(C语言)

    概述:         二叉树,这里采用孩子链表存储法,即一个数据域和两个左右孩子指针域。随后递归进行遍历即可。在创建二叉树的时候,先创建各个二叉树结点(这里的结点采用动态分配,因此结点为指针变量),随后,再根据逻辑结构图,手动通过左右指针域,链接到对

    2024年02月11日
    浏览(36)
  • 力扣(144. 二叉树的前序遍历&&94.二叉树的中序遍历&&145. 二叉树的后序遍历)

    题目链接 题目1: 思路:较简单的思路,就是先将左孩子全部入栈,然后出栈访问右孩子,右孩子为空,再出栈,不为空,右孩子入栈,然后再次循环访问左孩子。 题目链接 题目2: 思路:同前序遍历一样,只不过访问结点,改为出栈时访问。 题目3链接 题目3: 思路1:同样

    2024年01月19日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包