Perl implement Tree data structure (1)

perl 实现二叉树,二叉平衡树  #! /usr/bin/perl -wuse strict;use warnings;use Data::Dumper;my $head = undef;my $copy = /$head;foreach my $index( 1 .. 10 ){  &AVLTree_insert($copy, $index);}#&create_BSTree( $copy );#&create_tre 阅读详情

用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 二叉搜索树 用Perl 的一般方式实现了一个完整的二叉搜索树,有如下功能: 1. 插入,删除,搜索 2. 最大,最小值 3. 某节点的前序节点,后序节点 整个过程中更改了好几次: 1. 增加了parent 属性,可以方便的找到父节点,有利于前序后序节点的查找。 2. 最初节点不是都有left right 属性,只有在有子节点的情况下才出现,后来为了统一所有节点都加上这些属性,没有子节点的情 阅读详情

相关推荐

Perl/Tk入门学习(上)

使用Perl/Tk模块编写简单的选择文件的GUI。

孤帆远影碧空尽 5993

Perl 闭包模拟类实现二叉树

在上一篇文章中用函数方式实现了一个二叉树,本篇用闭包模拟类的方式来重新实现,不同于传统意义的Perl 类,否则也不用去费力重新实现,本篇用闭包来模拟类的一些行为,以消息传递的方式调用方法。 功能同上一个版本的基本一样,是用闭包的好处: 1。 模拟类行为,开放类方法 2。 内部变量不可直接修改,只能通过方法调用获取或修改值 3。 消息类型多样,自己可以随便控制 特点: 1

USTBHacker的专栏 1754

Tk 表格的宽度

#禁止窗口缩放 #$mw->resizable(0,0); require Tk::Table; $table_frame = $mw->Frame()->pack(-expand => 1,-fill => 'both'); $table = $table_frame->Table(-columns => 10, -rows =

zhaoyangjian724的专栏 1896

perl实现二叉树

最开始写的代码,每个结点用一个匿名哈希来表示,可惜运行时错误。。。代码如下 use strict ;use warnings ;sub create_tree { my $n8 = { 'left' =&gt; undef , 'right' =&gt; undef , 'value' =&gt; 8 , } ; my $n6 = ...

weixin_34414196的博客 226

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

USTBHacker的专栏 1553

基于51单片机扫地机器人(全套Proteus仿真+原理图+程序+说明书)

(内含源程序代码,原理图,仿真,讲解视频,元件清单等,【精品】值得推荐!!!扫地机器人是以单片机为主控制器。通过单片机控制小车行驶、除尘、蜂鸣。扫地机器人使用双电机驱动,以提高整车运动的平稳性;在智能车进驶过程中,采用双超声波模块实现避障。

2301_76434107的博客 1895

使用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网站

天山古猿 2453

比特大陆校招笔试

我当时做的时候没有概念(上边倒计时我一直以为是一个模块的),所以第一个模块写的太长了导致最后才留15分钟快速选的(一共18道题),有一题最后没有选上,两题没有认真看题目瞎选的,求求求过过过!选择题:主要考高中物理题、数学题(念过高中的一定会,但是需要时间算,需要留25分钟左右的时间做)第一道就是写个人的内容,什么最近读过的书,最近的感受等等;分为两个模块,考试内容超级无敌简单,但是注意时间掌握。注意这里别花太长的时间,不然后边来不及。第二道逻辑分析题,需要你写解答。

Domainwa的博客 668

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...

weixin_33939843的博客 151

嵌入式定点PID控制器:mrm-pid极简实现与实时控制实践

PID控制器是自动控制领域的基础算法,其核心在于比例、积分、微分三环节的协同调节。在资源受限的嵌入式系统中,传统浮点PID易受时序抖动、内存分配不确定性及FPU依赖影响,难以满足毫秒级确定性响应需求。定点PID通过整数运算替代浮点计算,显著提升执行周期稳定性与跨平台兼容性,成为电机控制、传感器补偿等实时场景的关键技术路径。mrm-pid库以位置式结构、int32_t增益参数、int64_t积分累加器和无动态内存设计,实现了超低开销(12–28 CPU周期)与完全可审计的闭环内核,天然适配Cortex-M系列

weixin_31659095的博客 570

perl/tk_在Perl / Tk中使用高级小部件

与Perl语言的广泛使用相比,Perl的GUI工具集Perl / Tk不太受欢迎。 这很奇怪,因为它可以说是最容易编程的GUI工具包之一(至少对于UNIX平台而言),因此建议将其自身用于用户界面原型设计或快速为用户提供围绕隐含命令行工具的用户友好包装器。 对Perl / Tk相对漠不关心的一个原因似乎是人们认为它不是很强大,并且不适合复杂的应用程序。 但是,许多提供更复杂功能的小部件都可以...

cuxiong8996的博客 2223

云计算学习——5G网络技术

华为eNSP网络设备模拟器的基础安装及简单使用

qq_42520799的博客 1444

Matplotlib之bar3d画3D柱状图

3D柱状图通常用于展示数据集中不同分类项的数据大小或数量。与普通的柱状图相比,3D柱状图更适合展示数据的三个维度 3D 柱状图 按行/列涂颜色 柱加阴影、描黑边 自定义座标轴名、刻度标签、范围

我走的每一步都算数 1121

Perl TK 抽屉式组件

转自:http://bbs.chinaunix.net/thread-3591026-1-1.html #!perl -w use Tk; $mw = MainWindow->new; $mw->title( 'Tk' ); $

ace_fei的专栏 990

PCL点云处理之计算点到空间直线距离的四种方法(二十三)

PCL点云处理之计算点到空间直线距离的四种方法

weixin_44329757的博客 3022

了解 Perl/Tk 模块,第 3 部分: 高级小部件

IBM技术期刊 926

用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->

m0_61544122的博客 8742

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

jujuchen的专栏 1010

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

Keep Moving~ 2259

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...

iteye_9815的博客 137

树形菜单,二级菜单,带菜单收缩图标

数据是从数据库中查询出来的 一般有二级菜单显示的话都会有一个字段用来存储父菜单的编号,pid是我的父菜单编号,一级菜单编父编号为0,二级菜单的父编号为父编号的id值 我的做法是,先查询出所有的一级菜单,然后存在一个数组中,再循环一级菜单去单个查询该菜单下的二级菜单,然后存在单独的一个list中,存在json里返回页面。 可以看到one是一级菜单,two是二级菜单,后面是数字是是一级菜单的id,也就是二级菜单的pid值,区分属于哪个一级菜单的子菜单。 <div class="per16">

weixin_46305078的博客 949

腾迅股票数据接口 http/javascript

之前使用了新浪的股票数据,由于新浪http/javascript缺少一些数据,用chrome自带的开发工具监视腾迅财经HTTP信息,得到以下获取股票数据的方法。 以五粮液为例,要获取最新行情,访问数据接口: http://qt.gtimg.cn/q=sz000858 返回数据: v_sz000858="51~五 粮 液~000858~27.78~27.60~27.70~41

USTBHacker的专栏 11万+
上一篇: Perl Class::Struct
下一篇: Perl implement Tree data structure (2)
Bai_Yuanyong
博客等级 码龄24年 46粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值