Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
50
Task/Tree-traversal/Tcl/tree-traversal-1.tcl
Normal file
50
Task/Tree-traversal/Tcl/tree-traversal-1.tcl
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
oo::class create tree {
|
||||
# Basic tree data structure stuff...
|
||||
variable val l r
|
||||
constructor {value {left {}} {right {}}} {
|
||||
set val $value
|
||||
set l $left
|
||||
set r $right
|
||||
}
|
||||
method value {} {return $val}
|
||||
method left {} {return $l}
|
||||
method right {} {return $r}
|
||||
destructor {
|
||||
if {$l ne ""} {$l destroy}
|
||||
if {$r ne ""} {$r destroy}
|
||||
}
|
||||
|
||||
# Traversal methods
|
||||
method preorder {varName script {level 0}} {
|
||||
upvar [incr level] $varName var
|
||||
set var $val
|
||||
uplevel $level $script
|
||||
if {$l ne ""} {$l preorder $varName $script $level}
|
||||
if {$r ne ""} {$r preorder $varName $script $level}
|
||||
}
|
||||
method inorder {varName script {level 0}} {
|
||||
upvar [incr level] $varName var
|
||||
if {$l ne ""} {$l inorder $varName $script $level}
|
||||
set var $val
|
||||
uplevel $level $script
|
||||
if {$r ne ""} {$r inorder $varName $script $level}
|
||||
}
|
||||
method postorder {varName script {level 0}} {
|
||||
upvar [incr level] $varName var
|
||||
if {$l ne ""} {$l postorder $varName $script $level}
|
||||
if {$r ne ""} {$r postorder $varName $script $level}
|
||||
set var $val
|
||||
uplevel $level $script
|
||||
}
|
||||
method levelorder {varName script} {
|
||||
upvar 1 $varName var
|
||||
set nodes [list [self]]; # A queue of nodes to process
|
||||
while {[llength $nodes] > 0} {
|
||||
set nodes [lassign $nodes n]
|
||||
set var [$n value]
|
||||
uplevel 1 $script
|
||||
if {[$n left] ne ""} {lappend nodes [$n left]}
|
||||
if {[$n right] ne ""} {lappend nodes [$n right]}
|
||||
}
|
||||
}
|
||||
}
|
||||
22
Task/Tree-traversal/Tcl/tree-traversal-2.tcl
Normal file
22
Task/Tree-traversal/Tcl/tree-traversal-2.tcl
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
# Helpers to make construction and listing of a whole tree simpler
|
||||
proc Tree nested {
|
||||
lassign $nested v l r
|
||||
if {$l ne ""} {set l [Tree $l]}
|
||||
if {$r ne ""} {set r [Tree $r]}
|
||||
tree new $v $l $r
|
||||
}
|
||||
proc Listify {tree order} {
|
||||
set list {}
|
||||
$tree $order v {
|
||||
lappend list $v
|
||||
}
|
||||
return $list
|
||||
}
|
||||
|
||||
# Make a tree, print it a few ways, and destroy the tree
|
||||
set t [Tree {1 {2 {4 7} 5} {3 {6 8 9}}}]
|
||||
puts "preorder: [Listify $t preorder]"
|
||||
puts "inorder: [Listify $t inorder]"
|
||||
puts "postorder: [Listify $t postorder]"
|
||||
puts "level-order: [Listify $t levelorder]"
|
||||
$t destroy
|
||||
Loading…
Add table
Add a link
Reference in a new issue