#!/usr/bin/Rscript insert <- function(tree, data) { if(is.null(tree$data)) tree <- list(left=NULL, right=NULL, data=data) else if(data < tree$data) tree$left <- insert(tree$left, data) else tree$right <- insert(tree$right, data) return(tree) } pre_order <- function(tree) { if(is.null(tree$data)) return() cat(tree$data, " ") pre_order(tree$left) pre_order(tree$right) } post_order <- function(tree) { if(is.null(tree$data)) return() post_order(tree$left) post_order(tree$right) cat(tree$data, " ") } in_order <- function(tree) { if(is.null(tree$data)) return() in_order(tree$left) cat(tree$data, " ") in_order(tree$right) } tree_minimum <- function(tree) { while(!is.null(tree$left$data)) tree <- tree$left return(tree$data) } tree_maximum <- function(tree) { while(!is.null(tree$right$data)) tree <- tree$right return(tree$data) } tree_minimum_recursive <- function(tree) { if(is.null(tree$left$data)) return(tree$data) return(tree_minimum_recursive(tree$left)) } tree_maximum_recursive <- function(tree) { if(is.null(tree$right$data)) return(tree$data) return(tree_maximum_recursive(tree$right)) } tree <- list() for(i in c(17, 12, 10, 5, 15, 20, 19, 28, 33)) tree <- insert(tree, i) cat("Pre-Order: ") pre_order(tree) cat("\nPost-Order: ") post_order(tree) cat("\nIn-Order: ") in_order(tree) cat("\n\n") cat("Tree minimum: ", tree_minimum(tree), "(iterative)", tree_minimum_recursive(tree), "(recursive)\n") cat("Tree maximum: ", tree_maximum(tree), "(iterative)", tree_maximum_recursive(tree), "(recursive)\n")