什么是二叉树
二叉树是非常实用的一种数据结构,能大大提高数据的存储和搜索效率。二叉,顾名思义,一个节点,最多有两个子节点,一个在左,一个在右。
1. 满二叉树
每一层所有节点都有两个子节点,直到最后一层。当层数相同时,满二叉的节点数达到最大值,一共有 S = 2^n - 1 个。
2. 完全二叉树
一颗二叉树中,除最后一层外其余层都是满的,最后一层要么是满的,要么在右边缺少连续若干节点(因为加node的顺序是从左到右)。总节点数 S 介于n层全满2^n -1 和 n-1层全满加上n层至少有一个 2^(n-1) - 1+1 = 2^(n-1) 之间, 2^(n-1) <= S <= 2^n - 1 个。
3. 平衡二叉树
又称为AVL树,对于二叉树的任意节点,两个子树高度差被称为它的平衡因子,当二叉树的每个节点的平衡因子都是0,-1,或1时,才能称为标准的AVL树。如下图是一颗典型的AVL树,就像天平,两边要等重,每个节点旁都标记了平衡因子用红色数字表示:
只要任何一个点的平衡因子不是-1, 0, 1, 都不是AVL树,如下图:
4. 二叉查找树
。。。
5. 红黑树
。。。
三个字母了解二叉树的三种遍历
遍历二叉树的方法主要有三种:先序遍历,中序遍历,后续遍历。
如下图,有一个节点用D 表示,它的左子树用 L 表示,右子树用 R 表示,一般产生树的节点过程都是从上到下,从左到右,所以就照我们所认知的这个顺序来看就是先序遍历:先 D, 再 L, 再 R,简称 DLR。
先序遍历:DLR; (D在前)
中序遍历:LDR; (D在中)
后序遍历:LRD; (D在后)
我在google的时候参考了两篇关于二叉树的文章,我觉得算是写的比较简单明了的,也有code可参考,分享给大家,链接如下:
1. 二叉树的分类
2. Python二叉树的三种遍历方式
下篇:以list形式print出先序遍历,中序遍历,后续遍历二叉树 (因为刷leetcode的时候先刷到了中序遍历,然后就顺便把三种遍历都找出来用同一支code都跑了一遍)