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