1
我想實現一個inorder遍歷,在每個階段我會得到當前節點。 例如:使用Prolog的二叉樹序列遍歷
?- getnodesinorder(tree(1,nil,nil),X).
X = 1 ;
false.
?- getnodesinorder(tree(5,tree(4,tree(1,nil,tree(3,tree(2,nil,nil),nil)),nil),tree(6,nil,nil)),X).
X = 1 ;
X = 2 ;
X = 3 ;
X = 4 ;
X = 5 ;
X = 6 ;
false.
我已經嘗試了下面的代碼:
getnodesinorder(tree(CurrentNode,nil,nil), CurrentNode).
getnodesinorder(tree(X, Left, nil), CurrentNode) :-
getnodesinorder(Left, _),
CurrentNode is X.
getnodesinorder(tree(X, nil, Right), CurrentNode) :-
CurrentNode is X,
getnodesinorder(Right, _).
getnodesinorder(tree(X, Left, Right), CurrentNode) :-
getnodesinorder(Left, _),
CurrentNode is X,
getnodesinorder(Right, _).
所以當然底座(例如1號作品),但試圖運行:第二個我得到
X=5;
false
時
作爲結果。這是爲什麼?
好吧,這樣做(見上文編輯),但現在我只是得到X = 5,然後假從某種原因。 – user550413 2011-01-22 16:53:54