【问题标题】:racket - produce the number of operations in a binary tree球拍 - 产生二叉树中的操作数
【发布时间】:2019-11-30 04:03:18
【问题描述】:

我正在尝试编写一个使用二叉树并在其中生成操作总数的函数。我的尝试是检查参数是否为数字,如果是,则在总数中加 1。

有人可以帮我写代码吗?

(define-struct binode (op arg1 arg2))
(define (count-ops bin-exp)
  (cond
    [(number? bin-exp) 1]
    [(binode? bin-exp)
     (+ (count-ops (binode-arg1 bin-exp))
        (count-ops (binode-arg2 bin-exp)))]))

测试:

(check-expect (count-ops (make-binode ‘+ 4 (make-binode ‘- 5 (make-bin ode ‘+ 3 2)))) 3)

函数产生 4 而不是预期的结果

【问题讨论】:

  • 测试用例? 123

标签: scheme lisp binary-tree racket


【解决方案1】:

你的答案是如此接近!你只需要修正基本情况:当我们达到一个数字时,我们应该加零,而不是一:我们计算的是 operators 的数量,而不是 operands 的数量.

相反,在递归的情况下,我们必须加一个:如果我们到达递归步骤,那是因为我们在一个运算符处,而那些是我们想要计算的那些。这就是我的意思:

(define-struct binode (op arg1 arg2))

(define (count-ops bin-exp)
  (cond
    [(number? bin-exp) 0]
    [(binode? bin-exp)
     (+ 1 (count-ops (binode-arg1 bin-exp))
          (count-ops (binode-arg2 bin-exp)))]
    [else (error "Invalid input:" bin-exp)]))

它按预期工作:

(count-ops (make-binode '+ 4 (make-binode '- 5 (make-binode '+ 3 2))))
=> 3

【讨论】:

  • 条件应该有一个默认大小写。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多