球拍 - 产生二叉树中的操作数

racket - produce the number of operations in a binary tree

我正在尝试编写一个使用二叉树并生成其中的操作总数的函数。我的尝试是检查参数是否为数字,如果是,则将总数加 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

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

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

(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