無限極分類查詢所有子孫節點的改進演算法

2022-03-20 14:40:41 字數 2336 閱讀 6146

在以前,遇到無限極分類返回乙個節點的所有子孫節點時,我都是用遞迴計算的,後來發現時間複雜度和空間複雜度都太高了,後來自己研究了一下改進了演算法.

節點資料如下:鍵值對分別是自己對應父親節點

<?php 

$tree=array

( 1=>0,

2=>1,

3=>2,

4=>3,

5=>4,

6=>5,

7=>6,

8=>7,

9=>8,

10=>9,

11=>10,

12=>11,

13=>12,

14=>13,

15=>14,

16=>15,

17=>16,

18=>17,

19=>18,

20=>19,

21=>20,

22=>21,

23=>22,

24=>23,

25=>24,

26=>25,

27=>26,

28=>27,

29=>28,

30=>29,

31=>30,

32=>31,

33=>32,

34=>33,

35=>34,

36=>35,

37=>36,

38=>37,

39=>38,

40=>39,

41=>40,

42=>41,

43=>42,

44=>43,

45=>44,

46=>45,

47=>46,

48=>47,

49=>48,

50=>49,

51=>50,

52=>51,

53=>52,

54=>53,

55=>54,

56=>55,

57=>56,

58=>57,

59=>58,

60=>59,

61=>60,

62=>61,

63=>62,

64=>63,

65=>64,

66=>65,

67=>66,

68=>67,

69=>68,

70=>69,

71=>70,

72=>71,

73=>72,

74=>73,

75=>74,

76=>75,

77=>76,

78=>77,

79=>78,

80=>79,

81=>80,

82=>81,

83=>82,

84=>83,

85=>84,

86=>85,

87=>86,

88=>87,

89=>88,

90=>89,

91=>90,

92=>91,

93=>92,

94=>93,

95=>94,

96=>95,

97=>96,

98=>97,

99=>98,

100=>99,//

如果是遞迴的方法 到這一層的時候 就報錯了 可以注釋該層

);?>

以往演算法如下:

<?php 

function get_list($tree,$id=0)

}return

$list;//

返回陣列

}?>

結果如圖

去掉最後一層的那個元素 就可以獲取了。

這說明這樣的演算法在遇到節點層級非常深的時候會崩潰,例如超過100層,php會報錯誤的。後來改進了一種演算法如下:

<?php 

$id=2;

$new_array=array();//

存放子孫的陣列

$id_list=$id;//

存放父親的陣列

//遍歷所有子孫資料 每次去取已經有的資料的子孫 並把它加入父親陣列

for ($i=1; $i

<= count($tree); $i++)

}}$son_list=array_keys($new_array);//

拿到存放子孫的陣列 取鍵即可

print_r($son_list

);exit

();?>

無限極分類php實現 查子孫樹 家譜樹

1 本文更新日期 2018 05 20 親測可用,在原有基礎上進行增強和 詳細化 2 麵包屑導航 和 子孫樹 效果圖如下 無限級分類中,查家譜樹 麵包屑導航 子孫樹 無限極分類 area array 0 array id 1,cat name 北京市 pid 0 1 array id 2,cat n...

thinkPHP下的無限極分類

無限極分類在php的開發中起到很大的作用,如何是實現乙個無限極分類,有ajax的方法,現在我們用sql語句進行寫。path對應自己的族譜關係。建立的自己的控制器useraction.class.php的index方法 function index dump list this assign list...

php中的無限極分類

1.首先無限極分類對應的表的結構 cate id cate name parentid 預設0 1 鍵盤 0 2 機械鍵盤 1 3 cherry鍵盤 2 這裡面能看出來cherry的parentid的值等於等於他上一級的cate id,這也就是無限極分類的核心 2.無限分類功能就是把資料庫中的資料從...