二叉树的遍历(递归和非递归)实现 C++

本文介绍了二叉树的概念、分类,并详细讲解了二叉树的四种遍历方法(前序、中序、后序、层序)在C++中的递归和非递归实现,特别强调了后序遍历非递归的难点与解决策略。
摘要由CSDN通过智能技术生成

1.二叉树的概念

  • 树是一种非线性的数据结构,相对于线性的数据结构(链表、数组)而言,树的平均运行时间更短(往往与树相关的排序时间复杂度都不会高)
  • 二叉树是一个每个最结最多只能有两个分支的树,左边的分支称之为左子树,右边的分支称之为右子树。也就是说二叉树节点的度最大也就是2,而普通的树,节点的度是没有限制的。

2.二叉树的分类

完全二叉树——若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第h层有叶子结点,并且叶子结点都是从左到右依次排布,这就是完全二叉树

                                       

满二叉树——除了叶结点外每一个结点都有左右子叶且叶子结点都处在最底层的二叉树

                                      

平衡二叉树——平衡二叉树又被称为AVL树(区别于AVL算法),它是一棵二叉排序树,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。      

                           

    

3.为什么会有二叉树

在实际使用时会根据链表和有序数组等数据结构的不同优势进行选择。有序数组的优势在于二分查找,链表的优势在于数据项的插入和数据项的删除。但是在有序数组中插入数据就会很慢,同样在链表中查找数据项效率就很低。综合以上情况,二叉树可以利用链表和有序数组的优势,同时可以合并有序数组和链表的优势,二叉树也是一种常用的数据结构。

4.二叉树的遍历(C++)

遍历一棵二叉树常用的有四种方法,前序(PreOrder)、中序(InOrder)、后序(PastOrder)还有层序(LevelOrder)。 
前中后序三种遍历方式都是以根节点相对于它的左右孩子的访问顺序定义的。例如根->左->右便是前序遍历,左->根->右便是中序遍历,左->右->根便是后序遍历。 
而层序遍历是一层一层来遍历的。

typedef int DataType;

typedef struct TreeNode   
{
	DataType data; 
	struct TreeNode *left;
	struct TreeNode *right;
	 
}TreeNode, *BiTree; //二叉树 

typedef struct 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值