数据结构与算法分析(Java语言描述)学习--第六天

第4章 树

预备知识

一棵树是N个节点和N-1条边的集合,其中一个节点叫做根。
没有子节点的节点称为叶节点。
从节点1到节点2的路径的长为该路径上的边的条数。
任意节点的深度为从根到该节点的唯一路径的长。
节点的高是从该节点到一片树叶的最长路径的长。
一棵树的深度等于它的最深的树叶的深度,该深度总是等于这棵树的高。

树的实现

在每一个节点除数据外还要有一些链,使得该节点的每一个儿子都有一个链指向它。
将每个节点的所有儿子都放在树节点的链表中。

class TreeNode
{
	Object element;
	TreeNode firstChild;//第一儿子
	TreeNode nextSibling;//下一兄弟
}

树的遍历及应用

先序遍历。在先序遍历中,对节点的处理工作是在它的儿子节点被处理之前进行的。
先访问根节点,然后遍历左子树,最后遍历右子树。
遍历左右子树时,仍然先访问根节点,然后遍历左右子树。
后序遍历。在后序遍历中,对节点的处理工作是在它的儿子节点被处理之后进行的。
先遍历左子树,然后遍历右子树,最后访问根节点。
遍历左右子树时,仍然先遍历左右子树,然后访问根节点。

二叉树

一棵树,每个节点都不能有多于两个的儿子。
一棵平均二叉树的深度要比节点个数N小得多。

实现

保存直接链接到它们的链。

class BinaryNode
{
	Object element;
	BinaryNode left;
	BinaryNode right;
}

例子:表达式树

表达式树的树叶是操作数,其他节点是操作符。
中序遍历。中序遍历先遍历左子树,然后访问根节点,最后遍历右子树。
中缀表达式转换成后缀表达式:栈。遇到级别更低的运算符弹出。
构造表达式树
把后缀表达式转变为表达式树。
一次一个符号地读入表达式,如果符号是操作数,就建立一个单节点树并推入栈中。如果符号是操作符,就从栈中弹出两棵树并形成一棵新树,根就是操作符。

查找树ADT–二叉查找树

树中的每个节点,左子树中所有项的值小于节点中的项,右子树中所有项的值大于节点中的项。

contains方法

findMin和findMax方法

insert方法

remove方法

处理具有两个儿子的节点,用其右子树的最小数据代替该节点的数据,并递归删除那个节点。
懒惰删除:当一个元素要被删除时,仍留在树中,知识被标记为删除。

平均情况分析

一棵树的所有节点的深度的和称为内部路径长。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值