用perl实现了Tree的数据结构,使用Class::Struct来实现,以下为代码:
use Data::Dumper;
use Class::Struct;
struct Node =>{
left => 'Node',
value => '$',
right => 'Node',
};
$root = Node->new;
add($root,$_) for (5,7,1,4,9,6,0,9,100,20,30,21,60);
#print Dumper $root;
print LMR($root),"/n";
print RML($root),"/n";
print MLR($root),"/n";
sub add{
my ($root,$value) = @_;
if (! defined $root->value){
$root->value($value);
return;
}
my $tmp = $root;
while($tmp){
if ($value < $tmp->value){
if (defined $tmp->left){
$tmp = $tmp->left
}
else{
$tmp->left(Node->new(value => $value));
return
}
}
elsif ($value > $tmp->value){
if (defined $tmp->right){
$tmp = $tmp->right
}
else{
$tmp->right(Node->new(value => $value));
return
}
}
else{
return
}
}
}
#左序遍历
sub LMR{
my $tmp = shift;
if (defined $tmp->left){
LMR($tmp->left)
}
print $tmp->value;
if (defined $tmp->right){
LMR($tmp->right)
}
}
#右序遍历
sub RML{
my $tmp = shift;
if (defined $tmp->right){
RML($tmp->right)
}
print $tmp->value;
if (defined $tmp->left){
RML($tmp->left)
}
}
#中序遍历
sub MLR{
my $tmp = shift;
print $tmp->value;
if (defined $tmp->left){
MLR($tmp->left)
}
if (defined $tmp->right){
MLR($tmp->right)
}
}
问题:
树节点无法更改,无法改为平衡二叉树,也许是struct的问题,暂时还没有找到解决方法。
相关推荐
Perl/Tk入门学习(上)
使用Perl/Tk模块编写简单的选择文件的GUI。
Perl 闭包模拟类实现二叉树
在上一篇文章中用函数方式实现了一个二叉树,本篇用闭包模拟类的方式来重新实现,不同于传统意义的Perl 类,否则也不用去费力重新实现,本篇用闭包来模拟类的一些行为,以消息传递的方式调用方法。 功能同上一个版本的基本一样,是用闭包的好处: 1。 模拟类行为,开放类方法 2。 内部变量不可直接修改,只能通过方法调用获取或修改值 3。 消息类型多样,自己可以随便控制 特点: 1
Tk 表格的宽度
#禁止窗口缩放 #$mw->resizable(0,0); require Tk::Table; $table_frame = $mw->Frame()->pack(-expand => 1,-fill => 'both'); $table = $table_frame->Table(-columns => 10, -rows =
perl实现二叉树
最开始写的代码,每个结点用一个匿名哈希来表示,可惜运行时错误。。。代码如下 use strict ;use warnings ;sub create_tree { my $n8 = { 'left' => undef , 'right' => undef , 'value' => 8 , } ; my $n6 = ...
perl 编写的tree显示结构
use perl programming tool to struct tree
perl/tk树状菜单实例源代码
perl/tk树状菜单实例源代码(Perl TK有像QQ界面一样的卷帘式菜单)
Perl implement Tree data structure (2)
之前用struct实现的Tree不够灵活,重新使用hash来实现,更加灵活而且可以更改节点,进而实现平衡二叉树。 以下为程序代码: use Data::Dumper; my $tree = {}; add($tree,$_) for (5,7,1,4,9,6,0,9,100,20,30,21,60); print Dumper $tree; LMR($tree,$tre
基于51单片机扫地机器人(全套Proteus仿真+原理图+程序+说明书)
(内含源程序代码,原理图,仿真,讲解视频,元件清单等,【精品】值得推荐!!!扫地机器人是以单片机为主控制器。通过单片机控制小车行驶、除尘、蜂鸣。扫地机器人使用双电机驱动,以提高整车运动的平稳性;在智能车进驶过程中,采用双超声波模块实现避障。
使用Perl的HTML::TreeBuilder::XPath来解析网页内容
原文地址:http://www.php-oa.com/2009/09/24/perl-html-tree-builder-xpath.html转过来 慢慢研究强大的Perl中,有超级多强大的模块,让我们不在需要重复的发明轮子.下面这个就是一个强大的模块.HTML::TreeBuilder::XPath.它能象xml一样解析网站.怎么使用就不细讲了,如下,见实例,我是从alexa.com网站
比特大陆校招笔试
我当时做的时候没有概念(上边倒计时我一直以为是一个模块的),所以第一个模块写的太长了导致最后才留15分钟快速选的(一共18道题),有一题最后没有选上,两题没有认真看题目瞎选的,求求求过过过!选择题:主要考高中物理题、数学题(念过高中的一定会,但是需要时间算,需要留25分钟左右的时间做)第一道就是写个人的内容,什么最近读过的书,最近的感受等等;分为两个模块,考试内容超级无敌简单,但是注意时间掌握。注意这里别花太长的时间,不然后边来不及。第二道逻辑分析题,需要你写解答。
Binary tree for perl
#!/usr/bin/perl -w # bintree - binary tree demo program use strict; my ( $root, $n ); # first generate 20 random inserts while ( $n++ < 20 ) { insert ( $roo...
嵌入式定点PID控制器:mrm-pid极简实现与实时控制实践
PID控制器是自动控制领域的基础算法,其核心在于比例、积分、微分三环节的协同调节。在资源受限的嵌入式系统中,传统浮点PID易受时序抖动、内存分配不确定性及FPU依赖影响,难以满足毫秒级确定性响应需求。定点PID通过整数运算替代浮点计算,显著提升执行周期稳定性与跨平台兼容性,成为电机控制、传感器补偿等实时场景的关键技术路径。mrm-pid库以位置式结构、int32_t增益参数、int64_t积分累加器和无动态内存设计,实现了超低开销(12–28 CPU周期)与完全可审计的闭环内核,天然适配Cortex-M系列
perl/tk_在Perl / Tk中使用高级小部件
与Perl语言的广泛使用相比,Perl的GUI工具集Perl / Tk不太受欢迎。 这很奇怪,因为它可以说是最容易编程的GUI工具包之一(至少对于UNIX平台而言),因此建议将其自身用于用户界面原型设计或快速为用户提供围绕隐含命令行工具的用户友好包装器。 对Perl / Tk相对漠不关心的一个原因似乎是人们认为它不是很强大,并且不适合复杂的应用程序。 但是,许多提供更复杂功能的小部件都可以...
云计算学习——5G网络技术
华为eNSP网络设备模拟器的基础安装及简单使用
Matplotlib之bar3d画3D柱状图
3D柱状图通常用于展示数据集中不同分类项的数据大小或数量。与普通的柱状图相比,3D柱状图更适合展示数据的三个维度 3D 柱状图 按行/列涂颜色 柱加阴影、描黑边 自定义座标轴名、刻度标签、范围
Perl TK 抽屉式组件
转自:http://bbs.chinaunix.net/thread-3591026-1-1.html #!perl -w use Tk; $mw = MainWindow->new; $mw->title( 'Tk' ); $
PCL点云处理之计算点到空间直线距离的四种方法(二十三)
PCL点云处理之计算点到空间直线距离的四种方法
了解 Perl/Tk 模块,第 3 部分: 高级小部件
用Virtuoso和Abstract完成gds2lef
需要用到的工具有virtuoso和abstract。 数模混合的项目通常需要模拟完成模块设计,把接去数字的pin打上label(text),数字的floorplan才能正式开始。 如果只需要简单的数字PR boundary和pin点位置,那么只使用virtuoso就够了,还想把模拟版图都转成lef就要用到abstract工具。 1.PR boundary+pin 1)在virtuoso中打开layout a) Gui操作: Create->P&R Objects->
pscad IEEE标准系统搭建说明
pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。
无限级树形菜单
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http://www.w3.org/1999/xhtml" lang="zh-cn">CNL Tree Menu Ver1.02 - 无限级树形菜单 Written by CNLei, 枫岩 **************************************HTML Code
win10 跳过U8环境检测的IE WebControls.rar
win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。
perl LibXML模块使用详解
关于perl中如何获取xml文件的指定内容,可以使用LibXML模块进行,该模块有强大的xpath匹配关系,可以很方便地获取想要的信息,整个模块使用说明,点击如下链接: https://grantm.github.io/perl-libxml-by-example/basics.html
VC中sqlite的使用
在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示
复分析 阿尔福斯(Ahlfors) 第三版答案 英文
答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案
常用的三种树形菜单->很实用的
a { text-decoration:none; } a, a:visited { color:#000; background:inherit; } body { margin:0; padding:20px; font:12px tahoma, 宋体, sans-serif; } dt { font-size:22px; font-weight:bold; mar...
树形菜单,二级菜单,带菜单收缩图标
数据是从数据库中查询出来的 一般有二级菜单显示的话都会有一个字段用来存储父菜单的编号,pid是我的父菜单编号,一级菜单编父编号为0,二级菜单的父编号为父编号的id值 我的做法是,先查询出所有的一级菜单,然后存在一个数组中,再循环一级菜单去单个查询该菜单下的二级菜单,然后存在单独的一个list中,存在json里返回页面。 可以看到one是一级菜单,two是二级菜单,后面是数字是是一级菜单的id,也就是二级菜单的pid值,区分属于哪个一级菜单的子菜单。 <div class="per16">
腾迅股票数据接口 http/javascript
之前使用了新浪的股票数据,由于新浪http/javascript缺少一些数据,用chrome自带的开发工具监视腾迅财经HTTP信息,得到以下获取股票数据的方法。 以五粮液为例,要获取最新行情,访问数据接口: http://qt.gtimg.cn/q=sz000858 返回数据: v_sz000858="51~五 粮 液~000858~27.78~27.60~27.70~41
5993



被折叠的 条评论
为什么被折叠?



