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的问题,暂时还没有找到解决方法。
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 implement Tree data structure (2)
- LeetCode208 Implement Trie (Prefix Tree). LeetCode211 Add and Search Word - Data structure design
- Data Structure Binary Tree: How to determine if a binary tree is height-balanced?
- Data Structure Binary Tree: Iterative Postorder Traversal
- Data Structure Binary Tree: Inorder Tree Traversal without Recursion
- LRU implement Data Structure analysis
- Senior Data Structure · 浅谈线段树(Segment Tree)
- Data Structure Binary Tree: Construct Tree from given Inorder and Preorder traversals
- leetcode_Design and implement a data structure for Least Recently Used (LRU) cache
- Data Structure Binary Tree: Convert a given Binary Tree to Doubly Linked List
- JavaScript Build Tree Data Structure Using Array
- Data Structure Binary Tree: Check if a given Binary Tree is SumTree
- Data Structure Binary Tree: Print ancestors of a given binary tree node without recursion
- Data Structure Binary Search Tree: Find k-th smallest element in BST (Order Statistics in BST)
- Data Structure Binary Tree: Connect nodes at same level using constant extra space
- Data Structure Binary Tree: Populate Inorder Successor for all nodes
- 树状结构 Tree data structure in C#
- Data Structure Binary Tree: Convert a given tree to its Sum Tree
- Data Structure Binary Tree: Lowest Common Ancestor in a Binary Tree
- Build Tree View Structure for SharePoint List Data