一,树的简介
树结构的形状很像现实生活中一棵倒置的大树。
树结构是由一堆节点和边组成的具有层级关系的非线性数据结构。
树顶部的节点被称为根节点,它通常是搜索、遍历等操作的起始位置。
树结构在很多地方都有应用,比如操作系统中的文件结构。
树的常见概念:
根节点(Root):树的最顶层节点。
父节点(Parent Node):节点沿着边往上一层的节点称为该节点的父节点。
子节点(Child Node):节点沿着边往下一层的节点称为该节点的子节点。
兄弟节点(Sibling):同一个父节点的子节点互为兄弟节点。
边(Edge):父节点和子节点之间连接,形成边。
叶子节点(Leaf):没有子节点的节点称为叶子节点或者叶节点。
子树(Subtree):以某个子节点为根节点的树分支。
节点的深度(Depth):是指从根节点到该节点的距离。
节点的高度(Height):该节点到叶子节点的最长距离。
树的高度(Height of tree):根节点到叶子节点的最长距离。
节点的层级(Level):该节点的父节点数量+1。
节点的度(Degree):该节点的子节点数量。
二,二叉树的基础概念
每个节点最多有两个子节点的树被称为二叉树。
在给定的二叉树中,任何级别的最大节点数为 2 l-1,其中"l"是级别编号。
树有很多种,二叉树只是其中一种典型结构,二叉树与其他种类树的区别:
1.有些树的每个节点可以有若干个子节点,而二叉树的每个节点最多只能有两个子节点。
2.有些树的每个节点的子节点之间可以是无序的,两个子节点之间甚至可以交换位置。而(有序)二叉树中,每个节点的子节点之间需要区分是左子节点还是右子节点,即使整棵树就两个节点。
三,二叉树的图示结构与分类
(1),满二叉树(full binary tree)
每个节点都有0个或2个子节点的二叉树称为满二叉树。
满二叉树除叶子节点以外,所有节点都有两个子节点。
(2),完美二叉树(perfect binary tree)
所有的叶子节点都在同一层。
所有内部节点都必须有两个子节点。
(3),完全二叉树(complete binary tree)
完全二叉树除了最后一层之外的所有层次都被填满,最后一层有的位置只有左节点。
注意,满二叉树是特殊的完全二叉树。
四,二叉树的常见表示方式
方式一,链式存储——用链表结构来表示二叉树
此时的二叉树被视为节点的集合。
链表节点的构成:
左指针,指向节点的左子节点的指针。
数据域,节点存储的实际数据。
右指针,指向节点的右子节点的指针。
如果给定节点没有子节点