数据结构—二叉树

148 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情

前言

上次说到,树中最常用的是二叉树。这也不难解释,从leetcode中的题目数量就能就能清楚的看出来。而且二叉树具有很特殊很有用的性质,接下来介绍二叉树。

二叉树定义

  1. 每个结点最多只有两棵子树(不存在度大于2的结点)
  2. 左子树和右子树次序不能颠倒(有序树)

特例

有一些二叉树有一些特殊的性质,于是将它们单独总结:

满二叉树

深度为k且有 2 k -1个结点的二叉树,大概就是一个叶子节点那一行全部有节点

完全二叉树

深度为k,有n个结点的 二叉树,当且仅当其每一个结点都与深度 为k的满二叉树中编号从1至n 的结点一一 对应时,称之为完全二叉树

这种二叉树有明显的特点,首先,叶子结点只可能在层次最大的两层上出现;其次,对任一结点,若其右分支下的子孙的最大层次为h, 则其左分支下的子孙的最大层次数必为h或h+1。但是要注意分辨,有的时候还是会分辨错误。

二叉树优点

上面说到二叉树具有很特殊很有用的性质,那么到底是什么呢?

  1. 二叉树的结构最简单,规律性最强
  2. 可以证明,所有树都能转化为唯一对应的二叉树,不失一般性

二叉树存储结构

顺序存储

用一组地址连续的存储单元依次 自上而下、自左至右存储二叉树上的结点元素。这种存储方式比较适合完全二叉树,对于非完全二叉树,需要在各层空缺处全部补上0,这样比较浪费空间,并且插入删除不便。

链式存储

由于种种缺点,所以出现链式存储,一般有两种节点形式:

image.png

后记

明天分享遍历