清华数据结构笔记:二叉树

二叉树

树将向量和列表的优点融合了起来

向量长于静态操作而列表长于动态操作,树则在某种程度上兼顾二者

树按照层次结构组织数据项

有根树

节点拥有孩子的个数为该节点的度数degree

归纳:一颗树的所含边数 = 所有节点的度数之和 = n - 1(n 为节点总数)

路径 + 环路

连通图:节点之间均有路径

无环图:不含环路

深度 + 层次

根节点的深度为0

题:

树的表示

父节点表示法

优点:查找父节点和根节点很方便

缺点:查找孩子节点和兄弟节点需要O(n)

孩子节点表示法

父亲孩子表示法

长子兄弟法

题:

二叉树

节点度数不超过2的树称为二叉树(binary tree)

真二叉树

不含度数为一的节点

多叉树->二叉树

题:

二叉树实现

高度更新

一个节点的高度 = 左子树或右子树中最大的高度 + 1

高度更新,更新当前节点及其历代祖先的高度

节点插入

题:

遍历规则

先序遍历

递归实现

迭代实现

实例

左侧链

先序遍历的宏观过程:自顶向下的依次访问左侧链上的沿途节点,再倒过来,自底向上地依次遍历各个层次上的每一颗右子树

题:

中序遍历

题:

后序遍历

迭代实现代码

表达式树

层次遍历

按照层次顺序访问

Huffman树

编码成本

Huffman算法

构造编码树