【问题标题】:Boolean function to check for leaf properties用于检查叶子属性的布尔函数
【发布时间】:2015-08-31 13:30:01
【问题描述】:

考虑一棵树,使得每个节点都包含一个整数。在方案中,树数据类型可以定义为

(define-type Tree
    [leaf (val : number)]
    [node (val : number)
          (left : Tree)
          (right : Tree)])

我想编写一个函数,给定一棵这样的树,如果每个叶子都大于从根到达叶子的节点路径中的数字总和,则返回 #t。

我正在考虑解决这个问题的方法是,将每个叶子的数量与从叶子到根的每个总和进行比较(即计算从叶子到根的每条路径的总和)。叶数小于或等于路径总和的第一条路径导致我返回#f。否则我必须搜索每一条路径。 这是最有效的方法吗? 深度优先搜索是实施此策略的最佳方式吗?

【问题讨论】:

  • 如果它是一棵树,那么每个叶子肯定只有一条路径吗?

标签: tree scheme depth-first-search


【解决方案1】:

我认为最方便的方法是直接树递归,即深度优先,使用参数存储“到目前为止的总和”。

伪代码:

(define (all-greater tree sum)
    (if the tree is a leaf 
        (> (val of tree) sum)
        (and (all-greater (left subtree of tree) (+ sum (val of tree)))
             (all-greater (right subtree of tree) (+ sum (val of tree))))))


(define (all-greater? tree) (all-greater tree 0))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    • 2019-11-15
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多