freeCodeCamp/guide/chinese/computer-science/data-structures/trees/index.md

72 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: Trees
localeTitle: 树
---
# 树
树数据结构可以递归(本地)定义为节点集合(从根节点开始),其中每个节点是由值组成的数据结构,以及对节点的引用列表(“子节点”) ,没有引用重复的约束,没有指向根。没有节点的树称为空树或空树。
二叉树是由节点组成的非线性数据结构其中每个节点具有以下3个组件
**数据元素** :在节点中存储任何类型的数据 **左指针** **指向**节点左侧的子树 **右指针** **指向**节点右侧的子树 顾名思义,数据元素在节点中存储任何类型的数据。 左右指针分别指向节点左侧和右侧的二叉树。
如果树为空,则由空指针表示。
## 树木中使用的术语:
**根** 树中的顶级节点。
**孩子** 远离Root时直接连接到另一个节点的节点。
**家长** 孩子的相反观念。
**兄弟姐妹** 一组具有相同父节点的节点。
**后裔** 通过从父到子重复进行的节点。
**祖先** 通过从子节点到父节点重复进行的节点。
**分支** (内部节点): 具有子节点的树的节点。
**Leaf** (不常称为外部节点): 没有子节点的节点。
**学位** 节点的子树数。
**边缘** 一个节点与另一个节点之间的连接。
**路径** 连接节点和后代的节点和边的序列。
**等级** 节点的级别由1 +(节点和根之间的连接数)定义。
**树的高度** 树的高度是其根节点的高度。
**深度** 节点的深度是从树的根节点到节点的边数。
**森林** 森林是一组n≥0个不相交的树。
### 一些流行的树木类型:
* 二叉树
* 二叉搜索树
* AVL树
* 红黑树
* Splay树
* 霍夫曼树
### 常见用途
* 表示分层数据
* 以易于搜索的方式存储数据
* 表示已排序的数据列表
* 路由算法
### 树节点的代码
\`\`\`c\_cpp 结节点 { int数据; //数据元素 struct node \* left; //指向左侧节点的指针 struct node \* right; //指向右边节点的指针 };
\`\`\`
#### 更多信息:
* [CMU课程笔记](http://www.cs.cmu.edu/~clo/www/CMU/DataStructures/Lessons/lesson4_1.htm)
* [维基百科](https://en.wikipedia.org/wiki/Tree_(data_structure))