2013-04-29 54 views
0

Prolog中的初學者,在二十幾小時的時間裏使用二叉樹。但作爲Prolog世界的新手,對它的工作過程有點困惑。 我做一些代碼以形成一個樹和tree.When的計數節點我測試,該程序輸出就像作爲..在Prolog中搜索二叉樹的節點

?- constructTree(T),count_nodes(T,N). 
T = tree(1, tree(2, tree(3, nil, nil), tree(4, nil, nil)), tree(5, tree(6, nil, nil), tree(7, nil, nil))), 
N = 7. 

Ť是對應的樹和Ñ表示節點樹的數量。

相應的代碼是:

constructTree(tree(1, 
      tree(2, 
       tree(3,nil,nil), 
       tree(4,nil,nil)), 
      tree(5, 
       tree(6,nil,nil), 
       tree(7,nil,nil)) 
     ) 
    ). 
count_nodes(nil,0). 
count_nodes(tree(_,L,R),N):- 
    count_nodes(L,CL), 
    count_nodes(R,CR), 
    N is CL+CR+1. 

我如何能實現搜索節點技術,特別是如果我想使用DFS搜索?考慮一下,我想使用DFS搜索找到節點5並計算迭代次數需要找到該節點。 與代碼的解釋將有助於理解這種新的語言.. :)

+0

你自己學習嗎?你在用什麼? – 2013-04-29 20:23:04

+0

你到目前爲止嘗試過什麼?順便說一下,您的示例數據是最小堆,而不是二叉搜索樹。 – 2013-04-29 22:33:10

+0

看到我上面的代碼,請你解釋min-heap和二叉搜索樹的區別.. @ DanielLyons – ridoy 2013-04-30 11:21:12

回答

0

count_nodes/2如何實現?這應該與搜索過程非常非常相似。只需添加搜索參數,並在值匹配時停止訪問(並計數)。

+0

我上面提到了我的代碼,我會嘗試你所說的。因爲我是新的,所以我需要一些時間來習慣與Prolog .. :)。我還有一個問題,如果是你提到的DFS搜索,那麼在BFS搜索中會是什麼情況(過程)? – ridoy 2013-04-30 11:26:20

+0

BFS只是交換遞歸調用WRT DFS的順序。這種簡單的交換對效率有着重大的影響(從根本上說,它也會交換時間/空間效率:) – CapelliC 2013-04-30 13:07:59

+0

請問您可以編輯上述DFS搜索代碼嗎? – ridoy 2013-05-03 19:09:42