树
来源:互联网 发布:网络内容提供商股票 编辑:程序博客网 时间:2024/05/13 19:51
概述
树可以有两种定义方式,递归和非递归。
非递归定义
树有结点集合和连接每对结点的有向边结合 组成。
树的递归定义
要么树为空,要么由根和零个或者多个非空子树组成,每棵树的根都被来自于根的边连接。
树的性质
一个特殊的结点作为根,根节点没有父节点,没有子节点的是叶子结点。
除了根之外,每个结点都被来自另一结点的边直接连接,被指向的是孩子,另一端是父亲。
从根节点带每个结点的遍历路径只有一条,遍历所需走过的边数即为路径长度。
树中某个结点的深度是指由根节点到该节点的路径长度;树中结点的高度是指该节点到最深叶子结点的路径长度。
结点的大小是指该节点所拥有的子孙数(包括结点本省);根节点的大小即为树的大小。
树的遍历
前序遍历:先处理自身,然后处理孩子结点(自身->左子结点->右子节点)
后序遍历:先处理孩子结点,然后处理自身(左子结点->右子节点->自身)
中序遍历:先处理左子结点,然后是自身,最后是右子节点(左子结点->自身->右子节点)
遍历示例
树可以递归的进行遍历: public void preOrder(){
System.out.println(ele);
if(left!=null){
left.preOrder();
}
if(right != null){
right.preOrder();
}
}
public void postOrder(){
if(left!=null){
left.postOrder();
}
if(right != null){
right.postOrder();
}
System.out.println(ele);
}
public void inOrder(){
if(left!=null){
left.inOrder();
}
System.out.println(ele);
if(right != null){
right.inOrder();
}
}
也可以使用栈来实现非递归的遍历,以后序遍历为例:
在遍历过程中,每个节点都会三次放入栈中。第三次弹出是表示该节点为当前要访问的结点。
栈中包含已经遍历但是未完成的结点,当将结点压入栈中,计数器的值为1、2、3时分别表示如下情况:我们要处理结点的左子树、要处理的右子树和自身
- 树
- 树
- 树
- 树
- 树
- 树
- 树
- 树
- 树
- 树
- 树
- 树
- 树
- 树
- 树
- 树
- 树
- 树
- Android 下拉刷新上拉加载 多种应用场景 超级大放送(上)
- SAP项目MM调研清单
- C++ map的基本操作和使用
- android 抓包工具
- Java常用23种设计模式详解
- 树
- 企业同步共享实施的五大陷阱
- 解决微信扫码下载的两个方法
- 面试中如何回答“你是否愿意加班”
- 分布式文件系统FastDFS架构剖析
- How To Get Log, Trace Files In OA Framework Pages And Concurrent Request Programs
- ArcGIS 10.1中的Desktop创建地理数据库ArcSDEForOracle
- CSUOJ1404集合的并
- 欢迎使用CSDN-markdown编辑器