Perl implement Tree data structure (1)
用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,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的问题,暂时还没有找到解决方法。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |