预备知识
graph TB A((A)) B((B)) C((C)) D((D)) E((E)) F((F)) G((G)) H((H)) I((I)) J((J)) K((K)) L((L)) M((M)) N((N)) P((P)) Q((Q)) A---B A---C A---D A---E A---F A---G D---H E---I E---J F---K F---L F---M G---N J---P J---Q
一棵树是N个节点和N-1条边的集合
没有子节点的节点称为叶节点
两节点之间路径的长为该路径上边的条数
任意节点的深度为根节点到该节点路径的长
任意节点的高为该节点到一个叶结点的最长路径的长
数的实现
一般使用一个链表存储子节点
下图为上图的兄弟表示法

树的遍历及应用
先序遍历
考察到一个节点后,即刻输出该节点的值,并继续遍历其左右子树。(根左右)
中序遍历
考察到一个节点后,将其暂存,遍历完左子树后,再输出该节点的值,然后遍历右子树。(左根右)
后序遍历
考察到一个节点后,将其暂存,遍历完左右子树后,再输出该节点的值。(左右根)
二叉树
二叉树(binary tree)是一棵树,其中每个节点都不能有多于两个的子节点。
二叉树的一个性质是一棵平均二叉树的深度要比节点个数N小得多。其平均深度为,而对于特殊类型的二叉树,即二叉查找树(binary search tree),其深度的平均值为
实现
因为一个二叉树节点最多有两个子节点,所以我们可以保存直接链接到它们的链
表达式树
查找树ADT——二叉查找树
性质:对于树中的每个节点X,它的左子树中所有项的值小于X中的项,而它的右子树中所有项的值大于X中的项
平均深度: