list of the values in the leaf nodes of binary tree T

后端 未结 3 1728
梦如初夏
梦如初夏 2020-11-28 15:54

List is the list of values in leaf nodes of a binary tree and I am trying to figure out how to output just that. This is giving me all the nodes but I need just the leaves

3条回答
  •  一个人的身影
    2020-11-28 16:37

    Let's use a DCG - a Definite Clause Grammar. We start with your original definition:

    lea(T, L) :-
       phrase(values(T), L).
    
    values(nil) -->
       [].
    values(t(X,L,R)) -->
       [X],
       values(L),
       values(R).
    

    Now, we need to restrict ourselves to those t/3 that are leaves. One possibility is to enumerate all cases:

    lea2(T, L) :-
       phrase(leaves(T), L).
    
    leaves(nil) -->
       [].
    leaves(t(X,nil,nil)) -->
       [X].
    leaves(t(_,L,R)) -->
       { dif(L+R,nil+nil) },
       leaves(L),
       leaves(R).
    

    It would be even better and more efficient to use a conditional construct similar to if_/3. I want to leave this to someone interested.

提交回复
热议问题