php 二叉树 与赫夫曼树
admin
2023-07-29 03:20:08
0

在学习图之前,中间休息了两天,感觉二叉树需要消化一下。所以中间去温习了下sql,推荐一本工具书《程序员的SQL金典》看名字不像一本好书,但是作为一个不错的SQL工具书还是可以小小备忘一下。涵盖内容不详细但是挺广,覆盖多种主流数据库


言归正传,以前知道折半查找,二叉树的概念也是感觉挺有意思,二叉树的实现有一个案例很不错,代码如下

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值

然后根据权值来重新安排叶子结点,可以先序可以中序可以后续也可以中序,只要距离根节点的搜索顺序在前面就好

  1. 先序递归实现如下


  2. 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);
    }
    }
  3. 中序递归实现如下

  4. 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);
    }
    }
  5. 后续递归实现如下

  6. 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);
    		}
    	}
  7. 层序递归实现如下

  8. //我个人还是挺喜欢层序遍历
    	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);
    		}
    	}

记录一下。其实有时候在想,写程序的同事,真的要做点其他的。但行好事,莫问前程


愿法界众生,皆得安乐。

相关内容

热门资讯

热浪期间,法国家中死亡人数激增... 6月18日,在法国巴黎,人们在圣马丁运河水域消暑。新华社发上个月,欧洲遭遇了史上罕见的热浪袭击。根据...
日印各有所求,专家:双方的目标... 如何分析高市早苗此次访问中日印双方展现出的态度?两国关系可能面临哪些变量?凤凰卫视连线上海国际问题研...
二七区开展胡大白先进事迹专题宣... 7月1日,二七区邀请我校马克思主义学院党委副书记、工会主席韩树栋走进区委党校,开展胡大白董事长先进事...
台媒:谷立言与特朗普立场渐行渐... 前不久,台湾《中国时报》刊发社论指出,“美国在台协会”台北办事处处长谷立言对民进党“新两国论”几乎照...
中国共产党党员队伍稳步壮大 组... 党员10128.6万名 基层党组织543.1万个中国共产党党员队伍稳步壮大 组织体系日趋严密新华社北...
演上了!美议员当众举起手机:去... 据美国印度战略伙伴关系论坛(USISPF)近日发布的一段视频,美国共和党联邦参议员史蒂夫·戴恩斯在一...
15岁少年在家中和同学饮酒后裸... 早前报道:15岁少年家中和同学饮酒后身亡,全身赤裸,屋内有火烧痕迹大象新闻(2026年7月3日)端午...
3秒钟,差点毁了韩红基金会 图为韩红/图源:@韩红工作室韩红,最近有点麻烦。先是为冯小刚新片《抓特务》宣传,一句“走面儿”引发大...
聚焦四个主攻方向!重庆持续布局... ‍‍据《重庆日报》报道,7月2日上午,三峡实验室在两江新区揭牌。三峡实验室由重庆市政府与中国科学院联...
台“中选会”人事案再遭否决,蓝... 海峡导报综合报道 台“中选会委员”名额尚未达到规定最低人数,台民意机构3日针对台当局行政机构补提的3...