树的定义 基本术语

1. 树(Tree)的基本概念

1.1 树的定义

树是由结点或顶点和边组成的(可能是非线性的)且不存在着任何环的一种数据结构。没有结点的树称为空(null或empty)树。一棵非空的树包括一个根结点,还(很可能)有多个附加结点,所有结点构成一个多级分层结构。

1.2 树的基本术语

RootThe top node in a tree.树的顶端结点
ChildA node directly connected to another node when moving away from the Root.孩子当远离根(Root)的时候,直接连接到另外一个结点的结点被称之为孩子(Child); 
ParentThe converse notion of a child.双亲相应地,另外一个结点称为孩子(child)的双亲(parent)。
SiblingsA group of nodes with the same parent.兄弟具有同一个双亲(Parent)的孩子(Child)之间互称为兄弟(Sibling)。
AncestorA node reachable by repeated proceeding from child to parent.祖先结点的祖先(Ancestor)是从根(Root)到该结点所经分支(Branch)上的所有结点。
DescendantA node reachable by repeated proceeding from parent to child.子孙以某结点为根的子树中的任一结点都称为该结点的子孙(后代)。
LeafA node with no children.叶子(终端结点)没有孩子的结点(也就是度为0的结点)称为叶子(Leaf)或终端结点。
BranchA node with at least one child.分支(非终端结点)至少有一个孩子的结点称为分支(Branch)或非终端结点。
DegreeThe number of sub trees of a node.结点所拥有的子树个数称为结点的度(Degree)。
EdgeThe connection between one node and another.一个结点和另一个结点之间的连接被称之为边(Edge)。
PathA sequence of nodes and edges connecting a node with a descendant.路径连接结点和其后代的结点之间的(结点,边)的序列。 
LevelThe level of a node is defined by 0 + (the number of connections between the node and the root).层次结点的层次(Level)从根(Root)开始定义起,根为第0层,根的孩子为第1层。以此类推,若某结点在第i层,那么其子树的根就在第i+1层。
Height of nodeThe height of a node is the number of edges on the longest path between that node and a leaf.结点的高度结点的高度是该结点和某个叶子之间存在的最长路径上的边的个数。 
Height of treeThe height of a tree is the height of its root node.树的高度树的高度是其根结点的高度。 
Depth of nodeThe depth of a node is the number of edges from the tree's root node to the node.结点的深度结点的深度是从树的根结点到该结点的边的个数。 (注:树的深度指的是树中结点的最大层次。)
ForestA forest is a set of n ≥ 0 disjoint trees.森林森林是n(>=0)棵互不相交的树的集合。

2  二叉树(Binary Tree)

2.1  什么是二叉树(Binary Tree)

每个结点至多拥有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。

2.2  二叉树的性质

(1)若二叉树的层次从1开始,则在二叉树的第i层,不超过2^(i-1)个结点(i>=0)。

(2)对任何一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,则N0=N2+1;

(3)深度为h的二叉树最多有2^h-1个结点(h>=1),最少有h个结点;

(4)具有n个结点的完全二叉树的深度为int(log2n)+1

 

3  存储方式

存储的方式和图一样,有链表和数组两种,用数组存访问速度快,但插入、删除节点操作就比较费时了。实际中更多的是用链来表示二叉树的。

 

4   遍历方法

分为前序遍历,中序遍历和后序遍历,和按层次遍历。

前三种方法,根据根结点的顺序命名的,中序遍历最重要。可用递归实现,或者模拟栈操作来实现非递归的遍历方法。

中序遍历如下图:

 

按层遍历也比较简单,就是自己实现一个队列就可以了,也可以用数组来模拟。需要注意的是后序遍历的非递归算法,需要一个标识来标识某个节点的状态,具体的就是当一个节点左孩子被遍历的时候为一个状态,当左右两个节点都被遍历的时候又是一个状态,只有一个节点的左右孩子几点都被遍历,才可以输出这个节点的值,这个和后序遍历的定义差不多。

 
 

 

参考链接:https://www.cnblogs.com/idorax/p/6441043.html#top

二叉树实现参考链接:https://segmentfault.com/a/1190000014743964

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值