Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- pb(T, R):-
- cntNodes(T, T1),
- oddNodes(T1, R).
- cntNodes(t(K, nil, nil), t(K, nil, nil, 1)).
- cntNodes(t(Key, nil, R), t(Key, nil, t(RK, RL, RR, D2), D)):-
- cntNodes(R, t(RK, RL, RR, D2)),
- D is D2 + 1.
- cntNodes(t(Key, L, nil), t(Key, t(LK, LL, LR, D1), nil, D)):-
- cntNodes(L, t(LK, LL, LR, D1)),
- D is D1 + 1.
- cntNodes(t(Key, L, R), t(Key, t(LK, LL, LR, D1), t(RK, RL, RR, D2), D)):-
- cntNodes(L, t(LK, LL, LR, D1)),
- cntNodes(R, t(RK, RL, RR, D2)),
- ND is D1 + D2,
- D is ND + 1.
- oddNodes(t(_, nil, nil, 1), []).
- oddNodes(nil, []).
- oddNodes(t(Key, nil, R, D), [Key|Res]):-
- DH is D mod 2,
- DH = 0,
- oddNodes(R, Res).
- oddNodes(t(Key, L, nil, D), [Key|Res]):-
- DH is D mod 2,
- DH = 0,
- oddNodes(L, Res).
- oddNodes(t(_, L, R, _), Res):-
- oddNodes(L, Res1),
- oddNodes(R, Res2),
- append(Res1, Res2, Res).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement