C++数据结构---二叉树

本文介绍了二叉树的概念、性质,并详细阐述了前序、中序、后序和层次遍历四种遍历方法。还实现了创建二叉树、计算节点数量、获取特定层级节点数、树深、查找特定值节点等功能,以及检查是否为完全二叉树和销毁二叉树的代码。
摘要由CSDN通过智能技术生成


树的概念
树是一种能分层存储数据的数据结构,树中的每个元素被称为树的节点,每个节点有若干个指针指向子节点
从节点的角度来看,树是由唯一的起始结点引出的节点集合,这个起始结点被称为根(root),
树中节点的子树数目称为节点的度
树的度指其中节点的度最大值。比如1号节点的孩子是2、3、4,则1号节点的度数是3,且1号节点的度是最大的,故该树的度为3。


二叉树
二叉树是指对于树中的每个节点而言,最多由两个子节点,即任意节点的度小于等于2
层数:从根节点到某个节点的路径长度,根节点为0层
高度:最大层数+1
叶子节点数:没有子树的结点是叶子结点


满二叉树
要不没有子节点,要不有两个子节点
完全二叉树(顺序结构更好)
一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号。
只有最下面的节点的字节点可以小于2,并且最后一层的分叉全在最左边


二叉树的遍历
前序遍历(pre—order)
访问根节点,按前序遍历左子树,按前序遍历右子树
中序遍历(in—order)
按中序遍历左子树,访问根节点,按中序遍历右子树。特别的 ,对于二叉树搜索树,中序遍历可以获得一个由大到小或由小到大的有序序列
后序遍历(post—order)
按后序遍历左子树,按后序遍历右子树,访问根节点 
都属于深度优先算法
层次遍历
首先访问第0层,当第i层访问结束后,再从左到右依次访问第i+1层
层次遍历属于广度优先算法

本文实现的二叉树的功能有

1.创建一个二叉树

本文添加了一个不太成熟的创建二叉树的功能,用来根据已有的二叉树图像,基于层序遍历的方法创建二叉树。

2.二叉树的前序遍历打印

有采用非递归方式和递归方式两种,本文使用后者。

前序遍历是:先访问根节点,按前序遍历左子树,再按前序遍历右子树。

3.二叉树的中序遍历打印

按中序遍历左子树,访问根节点,按中序遍历右子树。特别的 ,对于二叉树搜索树,中序遍历可以获得一个由大到小或由小到大的有序序列。

4.二叉树的后序遍历打印

按后序遍历左子树,按后序遍历右子树,最后再访问根节点 。

5.层序遍历打印

6.返回二叉树节点的数量

7.返回二叉树第k层节点的个数

8.返回二叉树的深度

9.返回节点存储值为val的第一个节点
这里有四种方式返回(即四种遍历的方式返回四种情况),这里以前序遍历为例。

10.判断二叉树是否为完全二叉树

11.销毁二叉树,防止内存泄漏

下面是代码实现,就不在上面展示了!

#pragma once
#include<iostream>
#include<string>
#include<queue>
#inc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值