72 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			72 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								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))
							 |