龙空技术网

二叉树算法——二叉树的建立、查找、删除及遍历详解

罗哥软件开发 4217

前言:

此时大家对“c语言二叉树的创建”大体比较着重,同学们都需要学习一些“c语言二叉树的创建”的相关内容。那么小编同时在网摘上网罗了一些关于“c语言二叉树的创建””的相关知识,希望小伙伴们能喜欢,你们快快来了解一下吧!

定义:

二叉查找树(Binary Search Tree),(又名:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉排序树。

树的特点:

每个节点都有零个或多个子节点;

没有父节点的节点称为根节点;

每个非根节点(也就是子节点)有且只有一个父节点;

除根节点外,每个子节点可以分为多个不互相交叉的子树;

二叉树建立

储存基本单位与链表结构相同;

基本单位中储存当前节点的数据和当前节点的左右节点的地址;

具体使用到结构体

在建立过程中使用的是递归的方法,先左结点再右结点;

完整代码如下:

二叉查找树

查找功能是数据处理的一个基本功能。数据查找并不复杂,但是如何实现数据又快又好地查找呢?

二叉查找树的节点结构定义如下:

二叉树的基本操作:

插入操作:当向一棵二叉树插入一个节点时,要判断此节点的数据域和根节点的大小,如果比根节点数据域大就插入左子树中,比根节点小就插入右子树中,等于根节点插入失败。

查找操作:当从一棵二叉树查找一个节点时,要判断此节点的数据域和根节点的大小,如果比根节点数据域大就在左子树中查找,比根节点小就在右子树中查找,等于根节点就返回指向此根节点的指针,否则返回NULL。

删除操作:删除操作分三种情况①要删除的节点没有孩子节点,直接删除,并修改其父节点。②该节点只有一个孩子:将该节点的孩子直接提升到该节点处,并修改该相应的指针。③若该z节点有两个孩子:此情况比较复杂,找到该节点的后继y,并用y的右孩子替换y节点,再用y节点替换z,z的左孩子置为y的左孩子。

代码如下:

二叉树遍历

遍历是对树的一种最基本的运算,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次。由于二叉树是非线性结构,因此,树的遍历实质上是将二叉树的各个结点转换成为一个线性序列来表示。

设L、D、R分别表示遍历左子树、访问根结点和遍历右子树, 则对一棵二叉树的遍历有三种情况:DLR(称为先根次序遍历),LDR(称为中根次序遍历),LRD (称为后根次序遍历)。

先序遍历

访问根;按先序遍历左子树;按先序遍历右子树,C语言代码如下:

中序遍历

先访问左(右)子树,然后访问根,最后访问右(左)子树的遍历方式,C语言代码如下

后序遍历

按后序遍历左子树;按后序遍历右子树;访问根 ,C语言代码如下

标签: #c语言二叉树的创建 #二叉树的删除操作 c语言 #二叉树算法 #数据结构二叉树基本操作的编程实现 #数据结构二叉树的基本操作实验总结