这是一个家庭作业问题,我已经完成了几乎其余的代码,我要做的最后一部分是创建一个插入算法。
insert(I,T1,T2) - is true if T2 is the binary tree resulting from I being
inserted into binary tree T1.
到目前为止,我这部分的代码是......
insert(I,T1,T2) :- bTTree(T1(X,L,_), bTTree(T2(X,L,I).
insert(I,T1,T2) :- bTTree(T1(nil,nil,nil),bTTree(T2(I,nil,nil).
insert(I,T1,T2) :- bTTree(T1(X,L,_),bTTree(T2(X,L,I).
我不知道我是否朝着正确的方向前进。任何帮助将不胜感激。
我完成的代码(如果需要):
isempty(nil) :- !.
isempty(tree(nil,nil,nil)).
bTTree(tree(_,Left,Right)) :- binaryTree(Left), binaryTree(Right).
% 遍历。
%preorder -- N,左,右
preorder(tree(N,_,_),N).
preorder(tree(_,Left,_),N) :- preorder(Left,N).
preorder(tree(_,_,Right),N) :- preorder(Right,N).
%inorder -- 左、N、右。
inorder(tree(_,Left,_), N) :- inorder(Left,N).
inorder(tree(N,_,_), N).
inorder(tree(_,_,Right), N) :- inorder(Right,N).
%postorder -- 左、右、N
postorder(tree(_,Left,_),N) :- postorder(Left,N).
postorder(tree(_,_,Right),N) :- postorder(Right,N).
postorder(tree(N,_,_),N).
search(t,I) :- bTTree(t(I,_,_)).
search(t,I) :- bTTree(t(_,I,_)).
search(t,I) :- bTTree(t(_,_,I)).
search(t,I) :- bTTree(t(_,N,_)), search(N,I).
search(t,I) :- bTTree(t(_,_,N)), search(N,I).
height(t,H) :- bTTree(t(nil,nil,nil)), H is 0.
height(t,H) :- bTTree(t(N,nil,nil)), H is 1.
height(t,H) :- bTTree(t(_,Left,Right)),
height(Left, H1),
height(Right, H2),
H is max(H1,H2) + 1.
insert(I,t1,t2) :- bTTree(t1(X,L,_)),
bTTree(t2(X,L,I)).
insert(I,t1,t2) :- bTTree(t1(nil,nil,nil)),
bTTree(t2(I,nil,nil)).
insert(I,t1,t2) :- bTTree(t1(X,L,_)),
bTTree(t2(X,L,I)).