数据结构--树(tree)的简单介绍
来源:互联网 发布:js pubsub 编辑:程序博客网 时间:2024/06/05 10:46
简介
定义树的一种自然的方式是递归。一般的树:
一棵树是N个节点和N-1条边的集合。
树叶(leaf):没有儿子的节点。
兄弟(siblings):具有相同父亲的节点。用类似的方法可以定义祖父(grandparent)和孙子(grandchild)关系。
节点n的深度(depth):从根节点到节点n的唯一路径的长。
节点n的高度(height):从n到一片树叶的最长路径的长。
祖先(ancestor):如果存在从n1到n2的一条路径,那么n1是n2的一位祖先。而n2是n1的一个后裔(descendant)。
真祖先(proper ancestor):先满足是祖先,如果n1不等于n2,那么n1是n2的真祖先,而n2是n1的真后裔(proper ancestor)。
路径的长是指该路径上边的条数。
树的实现
方法一:在每一个节点除数据外还要有一些链,使得该节点的每一个儿子都有一个链指向它。
方法二:将每个节点的所有儿子都放在树节点的链表中。
一颗树
转成树的第一儿子/下一兄弟表示法:
树节点的声明
class TreeNode{ Object element; TreeNode firstChild; TreeNode nextSiblings;}
树的遍历及应用
先序遍历(preorder traversal):根节点 左节点 右节点
中序遍历(inorder traversal):左节点 根节点 右节点
后序遍历(postorder traversal):左节点 右节点 根节点
应用于:UNIX和DOS等操作系统的目录结构等。
二叉树(binary tree)
二叉树是一颗树,其中每个节点都不能有多于两个的儿子。
性质
一颗平均二叉树的深度要比节点个数N小的多。其平均深度为O(根号N),而二叉查找树(binary search tree),其深度的平均值为O(logN)。
不幸的是,正如下图所示,这个深度是可以大到N-1的,即是最坏情形二叉树:
实现
class BinaryNode{ Object element;//节点上的数据 BinaryNode left;//左子节点 BinaryNode right;//右子节点}
例子:表达式树(expression tree)
表达式树的树叶是操作数(operand),如常量或变量名,而其它的节点为操作符(Operator)。节点有可能含有多于两个的儿子。一个节点也有可能只有一个儿子,如具有一目减运算(unary minus operator)等情形。
构造表达式树
我们一次一个符号地读入表达式。如果符号是操作数,那么就建立一个单节点树并将它推入栈中。如果符号是操作符,那么就从栈中弹出两棵树T1和T2(T1先弹出)并形成一颗新的树,该树的根就是操作符,它的左右儿子分别是T2和T1。然后将这颗新树压人栈中。来看一个例子,设输入为ab+cde+**:
查找树ADT--二叉查找树
二叉查找树:查找树ADT--二叉查找树
AVL树
待写
伸展树
待写
树的遍历
待写
- 数据结构--树(tree)的简单介绍
- 【数据结构】树(Tree)
- 【数据结构】B-Tree, B+Tree, B*树介绍
- 数据结构-树(Tree)的基本概念
- 常用数据结构以及算法的简单介绍
- Java面试之数据结构的简单介绍
- 基本数据结构:树(tree)
- 基本数据结构:树(tree)
- 数据结构 三:树(Tree)
- 数据结构简单介绍
- 【数据结构】数据结构C语言的实现(简单二叉树)
- 扩充的数据结构-区间树interval-tree
- 简单的介绍数据结构的里的(数据 数据元素 数据项 数据对象)
- 黑马程序员——Java中简单的数据结构介绍
- 树的简单介绍
- 基本数据结构:二叉树(binary tree)
- 数据结构-平衡二叉树(AVL Tree)
- 数据结构 五:二叉树(Binary Tree)
- js PC QQ拖拽效果
- JAVA动态代理(JDK和CGLIB)
- 启动php时 127.0.0.1:9000 端口占用
- 基于poi3.14做的excel(.xlsx)转html的功能
- mach-o格式分析
- 数据结构--树(tree)的简单介绍
- 无人驾驶车辆平台
- android MediaPlayer和VideoView的使用
- jquery对style属性的操作
- 关于反编译的那些事
- ThinkPHP“逻辑或”关系的多条件查询
- eclipse上传代码到github
- ASP与 ASP.NET以及 ASP.NET MVC的关系
- 在spring中使用JDBC事务配置