您的位置:首页 > 其它

Perl implement Tree data structure (1)

2010-12-18 03:14 162 查看
用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的问题,暂时还没有找到解决方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: