層次樹展開問題

2021-07-25 16:09:00 字數 2405 閱讀 4634

在資料倉儲的層次建模時,常用遞迴的方式表示一顆層次樹,但有些bi工具的前端不支援遞迴,所以為了實現資料下鑽,可以把一棵遞迴樹進行擴充套件。

-- 建立原始樹表,並生成資料

create table tree

( c_parent integer,

c_child integer

);insert into tree (c_parent, c_child)

values (null, 1002);

insert into tree (c_parent, c_child)

values (1002, 1003);

insert into tree (c_parent, c_child)

values (1002, 1004);

insert into tree (c_parent, c_child)

values (1002, 1005);

insert into tree (c_parent, c_child)

values (1003, 1006);

insert into tree (c_parent, c_child)

values (1003, 1007);

insert into tree (c_parent, c_child)

values (1003, 1008);

commit;

-- 建立擴充套件的樹表

create table tree_explode

( c_parent integer, -- 父節點

c_child integer, -- 子節點

c_level integer, -- 父節點所在層級

c_distance integer, -- 父節點到子節點的層數

c_bottom char (1 byte), -- 是否葉子節點

c_seq varchar2 (100 byte), -- 從樹根到子節點的路徑

eff_dt date, -- 生效日期,用於維護歷史資訊

exp_dt date -- 失效日期,用於維護歷史資訊

);-- 建立儲存過程生成擴充套件樹表資料

create or replace procedure p_tree_explode

isbegin

for x in ( select c_child, level c_level

from tree

start with c_parent is null

connect by prior c_child = c_parent)

loop

insert into tree_explode (c_parent,

c_child,

c_level,

c_distance,

c_bottom,

c_seq,

eff_dt,

exp_dt)

select connect_by_root a.c_child,

a.c_child,

x.c_level,

level - 1,

decode (connect_by_isleaf, 1, 'y', 'n'),

( select sys_connect_by_path (c_child, '/')

from tree

where c_child = a.c_child

start with c_parent is null

connect by prior c_child = c_parent),

trunc (sysdate),

to_date ('9999-12-31', 'yyyy-mm-dd')

from tree a

start with a.c_child = x.c_child

connect by prior a.c_child = a.c_parent;

end loop;

commit;

end;

/-- 測試

truncate table tree_explode;

exec p_tree_explode;

select * from tree_explode;

樹的層次遍歷和確定層次問題

還是很簡單的 public void levelorder node root if node.getright null 層次遍歷有些演算法題會考,需要確定層次問題 public void levelorder node root if node.getright null size 大while...

樹的層次遍歷

include includeusing namespace std 結點權值作為結點編號 int postorder 31 後序遍歷結點 int inorder 31 中序遍歷結點 int leftnodes 31 儲存某結點的左子樹編號 int rightnodes 31 儲存某結點的右子樹編號...

樹 通用樹的層次遍歷

1,為何及如何按層次遍歷通用樹中的每乙個資料元素?1,通用樹結構是一種容器型別的樹結構,其用來裝資料元素,所以應該提供一種方法來遍歷樹中的每乙個資料結構 2,往下分析 2,當前的事實 1,樹是非線性的資料結構,樹的結點沒有固定的編號方式 1,也就不能像鍊錶一樣統一編號來訪問 3,新的需求 1,為通用...