如何继续评估方案中的二叉树

时间:2013-08-21 01:09:08

标签: scheme

我需要评估输入数字和二叉树的方案函数,并在二叉树中输出与数字深度相同的数据表达式。例如,树的根是1,子树的根是2,依此类推。

这是我到目前为止所得到的并且我不断收到错误消息Error in null?: expected a list; got '1'.(这是解决我之前问过的问题的另一种解决方法)你能用我已经使用过的术语来解释这个吗?因为我是计划编程的新手。

谢谢

(define fetch-exp (λ (n bt) 
  (cond [(not (deep-enough? n bt)) ▽#f]
        [(one? n) (root bt)]
        [(deep-enough? n (left-tree bt)) 
         (fetch-exp (left-tree bt) (sub1 n))] 
        [(deep-enough? n (right-tree bt)) 
         (fetch-exp (right-tree bt) sub1 n)] 
        [else ▽#f]))) 

(define deep-enough? 
 (λ (n bt) 
  (cond [(> (tree-depth bt) n) ▽#t] 
        [(equal? (tree-depth bt) n) ▽#t]      
        [else ▽#f])))

1 个答案:

答案 0 :(得分:0)

在递归中,您仍然以错误的顺序将参数传递回fetch-expression。首先是新n的值,然后是新树的值。

你仍然可以在足够深度内两次调用树深度?

(define deep-enough? 
 (λ (n bt) 
  (if (>= (tree-depth bt) n) 
      true
      false)))

修复它

但是看看我对你的另一个问题的答案,没有必要有一个单独的功能来计算深度。只需使用可以回溯的功能开始遍历它。 (向呼叫者发出错误信号,并且如果尚未尝试任何有效路径,则让呼叫者尝试不同的路径)