树的几个概念:
树(tree)是包含n(n>0)个结点的有穷集,其中:
(1)每个元素称为结点(node);
(2)有一个特定的结点被称为根结点或树根(root)。
(3)除根结点之外的其余数据元素被分为m(m≥0)个互不相交的集合T1,T2,……Tm-1,其中每一个集合Ti(1<=i<=m)本身也是一棵树,被 称作原树的子树(subtree)。
节点的度:一个节点含有的子树的个数称为该节点的度;
树的高度或深度:树中节点的最大层次;
树的表示形式
定义接口:
1、双亲表示法
2、孩子表示法
3、长子兄弟表示法
二叉树:
二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。
二叉树常被用于实现二 叉查找树和二叉堆。
树到二叉树的变换
二叉树分类:
二叉树、完全二叉树、满二叉树
node节点结构图
node结点类
二叉树类
先序遍历
首先访问根,再先序遍历左(右)子树,最后先序遍历右(左)子树
中序遍历
首先中序遍历左(右)子树,再访问根,最后中序遍历右(左)子树
后序遍历
首先后序遍历左(右)子树,再后序遍历右(左)子树,最后访问根
遍历用递归实现相对很简单,用迭代实现则需要借助栈结构实现
在一个有序二叉树下,中序遍历很有意义,中序遍历也为一个从小到大的排列 好
中序遍历等到的结果也是结点在底部做的映射
比如:
二叉树的相关公式:
在二叉树中,第i层的结点总数不超过2^(i-1);
深度为h的二叉树最多有2^h-1个结点(h>=1),最少有h个结点;
对于任意一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,则N0=N2+1;
具有n个结点的完全二叉树的深度为int(log2n)+1
二叉树查找效率
平衡二叉树:棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树,查找时间的时间复杂度为O(log2n)
平衡二叉树的定义:
平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树 的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树
对于一般的二叉搜索树(Binary Search Tree),其期望高度(即为一棵平衡树时)为log2n,其各操作的时间复杂度(O(log2n)),与二分查找相差不多