数据结构之树与二叉树
2016-09-22 11:12
232 查看
树的几个概念:
树(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
二叉树查找效率
树(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)),与二分查找相差不多
相关文章推荐
- AVL树-自平衡二叉查找树(Java实现)
- C#数据结构之顺序表(SeqList)实例详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- C#实现获取系统目录并以Tree树叉显示的方法
- 数据结构之Treap详解
- C语言实现输入一颗二元查找树并将该树转换为它的镜像
- C语言二叉树的非递归遍历实例分析
- 使用C语言构建基本的二叉树数据结构
- 一波二叉树遍历问题的C++解答实例分享
- 举例讲解C语言程序中对二叉树数据结构的各种遍历方式
- C++非递归队列实现二叉树的广度优先遍历
- PHP实现的线索二叉树及二叉树遍历方法详解
- C#使用前序遍历、中序遍历和后序遍历打印二叉树的方法
- 用C语言举例讲解数据结构中的算法复杂度结与顺序表
- C#数据结构之堆栈(Stack)实例详解
- C#数据结构之双向链表(DbLinkList)实例详解