赞
踩
树是由根结点和若干颗子树构成的。
树是由一个集合以及在该集合上定义的一种关系构成的。集合中的元素称为树的结点,所定义的关系称为父子关系。父子关系在树的结点之间建立了一个层次结构。在这种层次结构中有一个结点具有特殊的地位,这个结点称为该树的根结点,或称为树根。
这是一个普通的树。
普通定义:二叉树是指树中节点的度不大于2的有序树。
递归定义:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树。
在一棵二叉树中。如果所有分支结点都存在左子树和右子树,并且所有叶子都在同一层上,这样的二叉树称为满二叉树。
特点:
对一颗具有n个结点的二叉树按层编号,如果编号为i(1<=i<=n)的结点与同样深度的满二叉树中编号为i的结点在二叉树中位置完全相同,则这棵二叉树称为完全二叉树。
特点:
二叉树的顺序存储结构就是使用一维数组存储二叉树中的结点,并且结点的存储位置,就是数组的下标索引。
存储在一位数组中的形式:
如果二叉树为完全二叉树,节点刚好填满数组。
当二叉树不为完全二叉树时,图中(D、H、I)为不存在的节点。
起存储结构如下,∧表示数组中此位置没有存储结点。此时,存储结构存在浪费问题。
所以顺序储存结构适用于完全二叉树。
既然顺序存储不能满足二叉树的存储需求,那么考虑采用链式存储。
由二叉树定义可知,二叉树的每个结点最多有两个孩子。因此,可以将结点数据结构定义为一个数据和两个指针域。
如图采用一种链表结构存储二叉树,这种链表称为二叉链表。
二叉树的遍历是指从二叉树的根结点出发,按照某种次序依次访问二叉树中的所有结点,使得每个结点被访问一次,且仅被访问一次。共分为4种:
前序遍历:Preorder Traversal
NLR:Node→Left→Right
从二叉树的根结点出发,当第一次到达结点时就输出结点数据,按照先向左在向右的方向访问。
访问顺序为:
A→B→D→H→D→I→D→B→E→J→E→B→A→C→F→C→G
遍历输出为:
ABDHIEJCFG
中序遍历:Inorder Traversal
LNR:Left→Node→Right
从二叉树的根结点出发,先访问左子树,然后访问根节点,最后访问右子树。
或者说,只有当结点的子结点已经被遍历后才能遍历该结点。
访问循序为:
A→B→D→H→D→I→D→B→E→J→E→B→A→C→F→C→G
遍历输出为:
HDIBJEAFCG
后序遍历:Postorder Traversal
LRN:Left→Right→Node
从二叉树的根结点出发,从左到右先叶子后节点的方式遍历左右子树,最后访问根节点。
访问循序为:
A→B→D→H→D→I→D→B→E→J→E→B→A→C→F→C→G→C→A
遍历输出为:
HIDJEBFGCA
从根节点从上往下逐层遍历,在同一层,按从左到右的顺序对节点逐个访问。与上面提到的顺序存储相类似。
遍历输出:
ABCDEFGHIJ
参考
https://www.jianshu.com/p/bf73c8d50dc2
https://www.cnblogs.com/du001011/p/11229170.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。