php 二叉树 与赫夫曼树
在学习图之前,中间休息了两天,感觉二叉树需要消化一下。所以中间去温习了下sql,推荐一本工具书《程序员的SQL金典》看名字不像一本好书,但是作为一个不错的SQL工具书还是可以小小备忘一下。涵盖内容不详细但是挺广,覆盖多种主流数据库
言归正传,以前知道折半查找,二叉树的概念也是感觉挺有意思,二叉树的实现有一个案例很不错,代码如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
class BiNode{
public $data ;
public $lchild ;
public $rchild ;
public function __construct( $data ){
$this ->data = $data ; //节点数据
$this ->lchild = null; //左子节点指针
$this ->rchild = null; //右指针
}
}
class LinkBiTree{
private $root ; //根节点
private static $count ; //结点总数
const MAX_LEVEL = 2;
public function __construct(){
$this ->root = null;
self:: $count = 0;
}
public function ClearBiTree(){
$this ->clearTree( $this ->root);
}
/**
*@param $root 树的根节点
*
*/
public function clearTree( $root ){
if ( $root ){
if ( $root ->lchild){
$this ->clearTree( $root ->lchild);
}
if ( $root ->rchild){
$this ->clearTree( $root ->rchild);
}
unset( $root );
$root =null;
}
}
}
|
其实我更加感兴趣的就是赫夫曼树,能够给我带来感觉得才让我激动,就是100以内猜七次肯定可以猜出来,这种感觉是很奇妙的,当年赫夫曼为了传输点卯,更改了数据的排列顺序,形成了新的储存序列和标识,是的竟成使用的字母快速找出来,节省了资源,很棒。
赫尔曼构造算法的实现
初始化HT
输入初始n个叶子结点:置HT[1…n]的weight值
然后根据权值来重新安排叶子结点,可以先序可以中序可以后续也可以中序,只要距离根节点的搜索顺序在前面就好
先序递归实现如下
- 12345678910111213
public
function
PreOrderTraverse(){
$this
->preTraverse(
$this
->root);
return
self::
$preArr
;
}
//还是递归调用,不对,
private
function
preTraverse(){
if
(
$root
){
self::
$preArr
[]=
$root
->data;
//这里可以把数据都存进去也可以做其他操作或者业务逻辑function()
$this
->preTraverse(
$root
->lchild);
$this
->preTraverse(
$root
->rchild);
}
}
中序递归实现如下
- 123456789101112
public
function
InOrderTraverse(){
$this
->inTraverse(
$this
->root);
return
self::
$inArr
;
}
private
function
inTraverse(){
if
(
$root
){
$this
->inTraverse(
$root
->lchild);
self::
$inArr
[]=
$root
->data;
//这里可以把数据都存进去也可以做其他操作或者业务逻辑function()
$this
->inTraverse(
$root
->rchild);
}
}
后续递归实现如下
- 12345678910111213
public
function
PostOrderTraverse(){
$this
->postTraverse(
$this
->root);
return
self::
$postArr
;
}
private
function
postTraverse(){
if
(
$root
){
$this
->postTraverse(
$root
->lchild);
self::
$postArr
[]=
$root
->data;
//这里可以把数据都存进去也可以做其他操作或者业务逻辑function()
$this
->postTraverse(
$root
->rchild);
}
}
层序递归实现如下
- 12345678910111213141516
//我个人还是挺喜欢层序遍历
public
function
LevelOrderTraverse(){
for
(
$i
=1;
$i
<=
$this
->BiTreeDepth();
$i
++){
$this
->LevelOrderTraverse(
$this
->root,
$i
);
}
return
self::
$levelArr
;
}
private
function
leverTraverse(
$root
,
$level
){
if
(
$root
){
if
(
$level
==1){
self::
$levelArr
[]=
$root
->data;
}
$this
->LevelOrderTraverse(
$root
->lchild,
$level
-1);
$this
->LevelOrderTraverse(
$root
->rchild,
$level
-1);
}
}
记录一下。其实有时候在想,写程序的同事,真的要做点其他的。但行好事,莫问前程
愿法界众生,皆得安乐。
本文转自 jackdongting 51CTO博客,原文链接:http://blog.51cto.com/10725691/1951446
php 二叉树 与赫夫曼树相关推荐
- 由二叉树构造赫夫曼树
赫夫曼树: 假设有n个权值{w1,w2,w3....},试构造一棵具有 n个叶子节点的二叉树,每个叶子节点带权为wi,则其中 带权路径长度最小的二叉树称为最优二叉树或者叫赫夫曼树. 构造赫夫曼树: 假 ...
- 简述最优二叉树(赫夫曼树)
什么是哈夫曼树: 给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree).哈夫曼树是带权路径长度最短的树,权 ...
- 6.6.1最优二叉树(赫夫曼树)
首先我们来看一个伪代码.这个是代表成绩的等级. 然后我们知道,每一次高考,学生的成绩分布应该接近某个比例,现在我们假如分别规律如下: 为此可以作出下面的这个树. 我们发现,概率分布主要是在70-79, ...
- 赫夫曼树的定义及原理
参考<大话数据结构> 以学生成绩为例进行分析,正常的学生成绩的分布范围如下: 下面的图是普通的学生成绩判断,粗略的看什么问题,可是通常都认为,一张好的考卷应该是让学生的成绩大 ...
- 赫夫曼树(Haffman)及其运用
赫夫曼树,别名"哈夫曼树"."最优树"以及"最优二叉树". 概念: 路径:在一棵树中,一个结点到另一个结点之间的通路,称为路径. (从根结点 ...
- 数据结构-赫夫曼树(三)
Huffman Tree 哈夫曼树 霍夫曼树 概念 代码实现: 概念 路径和路径长度: 路径: 从一个节点往下可以达到的子节点或子子节点之间的通路 路径长度: 通路中分支的数目称之为路径长度. 根节点 ...
- 赫夫曼树及求解最小WPL的实现
赫夫曼树 定义: 假设有m个权值{W1,W2,...Wm},可以构造一颗含有n个叶子节点的二叉树,每个叶子节点的权为Wj,则其中树的带权路径长度即WPL最小的二叉树称作最优二叉树或赫夫曼树. 算法思想 ...
- 赫夫曼树+赫夫曼编码小结
赫夫曼树 赫夫曼树定义与原理 从树中一个节点到另一个节点之间的分支构成两个结点之间的路径,路径上的分支数目称做路径长度. 图6-12-4的二叉树a中,根结点到结点D的路径长度就为4,二叉树b中根结点到 ...
- 数据结构(十五)— 树结构之赫夫曼树及其应用
现在我们都是讲究效率的社会,什么都要求速度, 在不能出错的情况下,做任何事情都讲究越快越好.在计算机和互联网技术中,文本压缩就是一个非常重要的技术. 玩电脑的人几乎都会应用压缩和解压缩软件来处理文档. ...
最新文章
- 某程序员为让公司裁掉自己,消极怠工!故意旷工!但公司坚持不裁他,领导:给你发工资,就是不裁你!...
- Top K算法问题的实现
- visual 对话框之间调用_两套S71200之间实现S7通讯的方法
- ASP.NET几种安全验证方法(一)
- 解决Ubuntu18.04没有声音(简便且终极方法)
- Java面试之什么是GCRoots,能做什么?
- 【论文笔记】Revisiting Graph based Collaborative Filtering: A Linear Residual Graph Convolutional Network
- busybox inetd tftpd
- Flutter 进阶系列篇
- 【系统架构】ER图的画图规范和优化点
- 专升本高数第一章试题_专升本高数复习资料,精品系列
- 翻译软件-好用的翻译软件-免费翻译软件大全
- 计算机ms高级应用科目一 科目二考什么,科目一、科目二、科目三、科目四都考什么?全都在这儿了!...
- 【PHP面试题】请简述项目中优化SQL语句执行效率的方法,从哪些方面,SQL语句如何分析?
- 你天天努力的碎片化学习,为什么还在每天挤地铁?
- Clock skew too great(37)-PREAUTH_FAILED
- 高德地图地理编码和逆地理编码,以及逆地理编码的时候如何去掉省、市、镇
- C语言用链表实现管理系统
- linux怎么看go写的程序进程,Linux中查看进程状态信息-Go语言中文社区
- Altium Designer 21的使用(四):排针类元件模型的创建
热门文章
- postgresql 集群_谁说postgresql 没有靠谱的高可用(2)
- FTP搭建网络yum源
- 没有form的表单验证_PHP动态生成表单,内置17种常用组件并且支持表单验证!
- safari浏览器横屏怎么设置_Safari浏览器的几个小技巧你掌握了吗?
- c语言用正数的形式求最大值最小值,C语言-进制 - 盘盘的灰灰的个人空间 - OSCHINA - 中文开源技术交流社区...
- Linux基础之网络配置
- python集合属性方法运算_Python基础__字典、集合、运算符
- C语言变参函数的实现,C语言的那些小秘密之变参函数的实现
- sklearn查看版本 windows_解密windows系统版本和版本号,深入了解一组简单数字背后的故事...
- 虚拟机增强工具的安装