树
树的概念
树是一种能分层存储数据的数据结构,树中的每个元素被称为树的节点,每个节点有若干个指针指向子节点
从节点的角度来看,树是由唯一的起始结点引出的节点集合,这个起始结点被称为根(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