使用SQL,我想跟隨樹結構直到最後一頁。樹= 1和結= 2;樹= 1和結= 3;樹= 1和結=空(累積概率);樹= 2和結4 =樹= 2和結= 5;樹= 2和結是空(累積概率);樹= 3和結= 6;樹= 3和結是空(累積概率);樹= 4和結是空(累積概率);樹= 5並且結是空(累積概率);樹= 6並且結是空(累積概率);查找樹的高度
Q
查找樹的高度
-1
A
回答
0
如果組織這樣的數據,你可以做以下
with TREETAB as (
select '1' treenode, '2' nodeval from dual
union all
select '1' treenode, '3' nodeval from dual
union all
select '1' treenode, 'leaf1' nodeval from dual
union all
select '2' treenode, '4' nodeval from dual
union all
select '2' treenode, '5' nodeval from dual
union all
select '2' treenode, 'leaf2' nodeval from dual
union all
select '3' treenode, '4' nodeval from dual
union all
select '3' treenode, 'leaf3' nodeval from dual
union all
select '4' treenode, 'leaf4' nodeval from dual
union all
select '5' treenode, 'leaf5' nodeval from dual
union all
select '6' treenode, 'leaf6' nodeval from dual
)
select *
from (SELECT t.*, CONNECT_BY_ISLEAF Leaf,
SYS_CONNECT_BY_PATH(nodeval, '/') "Path", level
FROM TREETAB t
start with t.treenode = 1
CONNECT BY PRIOR t.nodeval = to_char(t.treenode))
where Leaf = 1
order by treenode;
如果不需要對樹,葉和路徑的詳細信息,你可以只檢查什麼也沒有同等價值treenode
爲nodeval
這樣
with TREETAB as
(select '1' treenode, '2' nodeval
from dual
union all
select '1' treenode, '3' nodeval
from dual
union all
select '1' treenode, 'leaf1' nodeval
from dual
union all
select '2' treenode, '4' nodeval
from dual
union all
select '2' treenode, '5' nodeval
from dual
union all
select '2' treenode, 'leaf2' nodeval
from dual
union all
select '3' treenode, '4' nodeval
from dual
union all
select '3' treenode, 'leaf3' nodeval
from dual
union all
select '4' treenode, 'leaf4' nodeval
from dual
union all
select '5' treenode, 'leaf5' nodeval
from dual
union all
select '6' treenode, 'leaf6' nodeval from dual)
select *
from TREETAB t
where not exists
(select t.treenode from TREETAB t2 where t2.treenode = t.nodeval)
+0
對不起,我不明白你明白那是樹狀態,上面的代碼獨立於樹長。使用的數據僅用於示例。 – Seyran
0
假設你正在談論的概率是相等的概率爲每個分支則:
WITH data (tree, knot) AS (
SELECT 1, 2 FROM DUAL UNION ALL
SELECT 1, 3 FROM DUAL UNION ALL
SELECT 1, NULL FROM DUAL UNION ALL
SELECT 2, 4 FROM DUAL UNION ALL
SELECT 2, 5 FROM DUAL UNION ALL
SELECT 2, NULL FROM DUAL UNION ALL
SELECT 3, 6 FROM DUAL UNION ALL
SELECT 3, NULL FROM DUAL UNION ALL
SELECT 4, NULL FROM DUAL UNION ALL
SELECT 5, NULL FROM DUAL UNION ALL
SELECT 6, NULL FROM DUAL
),
probabilities (tree, knot, probability) AS (
SELECT tree, knot, 1/COUNT(1) OVER (PARTITION BY tree) FROM data
),
cumulative_probabilities (tree, knot, probability, path) AS (
SELECT p.*, '/' || tree
FROM probabilities p
WHERE tree = 1
UNION ALL
SELECT p.tree, p.knot, p.probability * cp.probability, cp.path || '/' || p.tree
FROM probabilities p
INNER JOIN
cumulative_probabilities cp
ON (p.tree = cp.knot)
)
SELECT *
FROM cumulative_Probabilities
WHERE knot IS NULL;
輸出:
TREE KNOT PROBABILITY PATH
---- ---- ----------- ------
1 0.333333333 /1
3 0.166666667 /1/3
2 0.111111111 /1/2
6 0.166666667 /1/3/6
4 0.111111111 /1/2/4
5 0.111111111 /1/2/5
相關問題
- 1. 查找二叉查找樹的高度
- 2. 查找多路樹的高度
- 3. 返回二叉查找樹的高度
- 4. 二叉搜索樹 - 查找高度和深度
- 5. 無法找出二叉樹的高度
- 6. 使用Prolog查找二叉樹的高度
- 7. 如何查找樹的大小和高度?
- 8. 在bfs樹中查找節點的高度
- 9. 查找圖片的高度
- 10. 使用隊列表在二叉樹中查找高度
- 11. 查找整頁高度
- 12. 二叉樹高度
- 13. 查找二叉樹的最大深度
- 14. 二叉查找樹的深度
- 15. 查找樹的最大深度
- 16. 2-3-4樹的高度
- 17. Carrierwave和mini_magick查找寬度和高度
- 18. 使用深度樹的高度
- 19. 查找給定陣列預定義表示的BST樹的高度
- 20. 如何查找html內容的高度
- 21. 使用jquery查找類的高度
- 22. 查找除以的高度數N
- 23. 查找父視圖的高度
- 24. WebBrowser - 查找渲染文本的高度
- 25. 查找TextLayout組件的文本高度
- 26. 從iFrame內部查找div的高度
- 27. 以遞歸方式查找二叉樹中節點高度的總和
- 28. SWT樹項目高度
- 29. 樹形圖高度太長
- 30. 在numpy數組中檢測樹的高度和樹冠寬度
不知道,也許[分層查詢(https://docs.oracle.com/cd/B28359_01/server.111/b28286/queries003.htm#SQLRF52315)可以幫助您。如果您提供數據組織示例,表結構或其他內容,則將更易於理解解決方案。 – Seyran
你是什麼意思「採取概率」?什麼概率?它是如何計算的? – mathguy
在你的例子中,概率就是葉值,所以在我的答案中查詢計算得很好,如果構建一棵真正的概率樹,那麼每個節點也應該有概率,@MT0答案表明,如果我理解他的代碼,他應該去往每個節點的概率是相等的,並且如果沒有其他定義的條件是正確的。 – Seyran