zzzzh

  • 注册于 2022年5月5日
  • Cloud2016 教育变化之一可能是更加需要注重培养学生将复杂问题切分为简单问题的能力, 或者说是计算思维能力吧。。。

  • 利用R6包,尝试构建了一个二叉树。构建完二叉树之后,想尝试寻找二叉树所有路径 ,并以向量的形式呈现所有二叉树路径。在递归之后,返回的向量值为NULL,但是使用cat ()函数可以正确显示路径。希望大家能帮我看看递归函数什么地方写的不对 。。

    library(R6)
    
    Node <- R6Class(
      classname = "Node", 
      public = list(
        var = NULL,
        left = NULL, 
        right = NULL,
        initialize = function(var = NULL, left = NULL, right = NULL){
          self$var <- var
          self$left <- left
          self$right <- right
        }
      )
    )
    
    
    BST <- R6Class(
      classname = "BST",  
      public = list(
        root = NULL,
        insert = function(data){
          if(is.null(self$root)){
            self$root <- Node$new(data)
          }else{
            self$insert_recur(data, self$root)
          }
        },
        insert_recur = function(data, cur_node){
          if(data < cur_node$var){
            if(is.null(cur_node$left)){
              cur_node$left <- Node$new(data)
            }else{
              self$insert_recur(data, cur_node$left)
            }
          }
          else if(data > cur_node$var){
            if(is.null(cur_node$right)){
              cur_node$right <- Node$new(data)
            }else{
              self$insert_recur(data, cur_node$right)
            }
          }else{
            print('value already in tree')
          }
        }
        
      )
    )
    
    
    bst <- BST$new()
    
    bst$insert(3)
    bst$insert(6)
    bst$insert(1)
    bst$insert(2)
    bst$insert(5)
    bst$insert(7)
    
    
    
    
    
    print_path <- function(cur_node, str, helper){
      if(is.null(cur_node)){
        return(NULL)
      }
      if(is.null(cur_node$right) & is.null(cur_node$left)){
        helper <- c(helper, paste(str, cur_node$var))
        cat(helper, "\n")
      }else{
        if(!is.null(cur_node$left)){
          print_path(cur_node$left, paste(str, cur_node$var), helper)
        }
        if(!is.null(cur_node$right)){
          print_path(cur_node$right,paste(str, cur_node$var), helper)
        }
      }
    
      return(helper)
    }
    
    x <-  print_path(bst$root, "", c())