树
树的定义
树(Tree):
个结点构成的有限集合。当n=0时,称为空树。
对于任一棵非空树(
),它具有以下性质:
-
树中有一个称为“根(Root)”的特殊结点,用r表示;
-
其余结点可分为 个互不相交的有限集 ,其中每一个集合本身又是一棵树,称为原来树的“子树(SubTree)”
-
子树是互不相交的;
-
除了根节点外,每个结点有且仅有一个父节点;
不是树的几个例子:
-
一棵N个节点的树有N-1条边。(除了根结点,其余节点往上都有一条边)
树的一些基本术语
-
结点的度(Degree):结点的子树个数(即结点下面直接连着的边的条数。)
-
树的度:树中所有结点中最大的度数
-
叶结点(Leaf):度为0的结点
扫描二维码关注公众号,回复: 8782063 查看本文章 -
父结点(Parent):有子树的的结点是其子树的根结点的父结点
-
子结点(Child):若A结点是B结点的父结点,则称B结点是A结点的子结点,子结点也称孩子结点。
-
兄弟结点(Sibling):具有同一父结点的各结点彼此是兄弟结点。
-
路径和路径的长度:从结点 到 的路径为一个结点序列 , 是 的父结点。路径所包含边的个数为路径的长度。
-
祖先结点(Ancestor):沿树根到某一结点路径上的所有结点都是这个结点的祖先结点。
-
子孙结点(Descendant):某一结点的子树中的所有结点是这个结点的子孙。
-
结点的层次(Level):规定根结点在1层,其他任一结点的层数是其父结点的层数加1。
-
树的深度(Depth):树中所有结点中最大层次是这棵树的深度。
树的表示
- 数组实现
很难,因为不容易判别一个结点的父结点子结点和兄弟结点等等,故一般不用。 - 链表实现
- 结点不一致
由于代码方面很难设计,所以一般不用。 - 结点一致
-
按照树的度来设计结点指针域
若树的度为 ,则设计 个指针域。但是有些结点不一定有 个子结点,故会造成空间的浪费。
假设有 个结点,那么会被设计 个指针域,但是 个结点只有 条边,所以将会有 个指针域的空间被浪费。 -
儿子-兄弟表示法:每个结点设计两个指针域。第一个用来指向该结点的第一个子结点,第二个用来指向该节点的兄弟结点
针对上面的树,得到的表示图形如下:
假设有 个结点,那么会被设计 个指针域, 个结点有 条边,所以只会有 个指针域的空间被浪费。
将链表表示图旋转45度,将会得到一个二叉树的图。由此可见,一般的树都可以用二叉树链表来实现,所以二叉树的内容在树中是很重要的,接下来着重学习二叉树。
-
- 结点不一致