實現(xiàn)樹狀結(jié)構(gòu)的兩種方法1。遞歸法
遞歸是指在函數(shù)中顯式的調(diào)用它自身。
利用遞歸法實現(xiàn)樹狀結(jié)構(gòu)的特點是寫入數(shù)據(jù)速度較快,顯示速度較慢(在樹的分支/層次較多的情況下尤其明顯)。適用與 " /> avtt天堂网2014,jj插入bb,国产精品婷婷五月久久久久

天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

實現(xiàn)樹狀結(jié)構(gòu)的兩種方法


實現(xiàn)樹狀結(jié)構(gòu)的兩種方法1。遞歸法
遞歸是指在函數(shù)中顯式的調(diào)用它自身。
利用遞歸法實現(xiàn)樹狀結(jié)構(gòu)的特點是寫入數(shù)據(jù)速度較快,顯示速度較慢(在樹的分支/層次較多的情況下尤其明顯)。適用與寫入數(shù)據(jù)量大,樹的結(jié)構(gòu)復(fù)雜的情況下。
數(shù)據(jù)結(jié)構(gòu)(以mysql為例)

代碼:--------------------------------------------------------------------------------
CREATE TABLE `tree1` (
  `id` tinyint(3) unsigned NOT NULL auto_increment,
  `parentid` tinyint(3) unsigned NOT NULL default '0',
  `topic` varchar(50) default NULL,
  PRIMARY KEY  (`id`),
  KEY `parentid` (`parentid`)
) TYPE=MyISAM;

INSERT INTO `tree1` (`id`, `parentid`, `topic`) VALUES
  (1,0,'樹1'),
  (2,0,'樹2'),
  (3,0,'樹3'),
  (4,2,'樹2-1'),
  (5,4,'樹2-1-1'),
  (6,2,'樹2-2'),
  (7,1,'樹1-1'),
  (8,1,'樹1-2'),
  (9,1,'樹1-3'),
  (10,8,'樹1-2-1'),
  (11,7,'樹1-1-1'),
  (12,11,'樹1-1-1-1');
--------------------------------------------------------------------------------


字段說明
id,記錄的id號
parentid,記錄的父記錄id(為0則為根記錄)
topic,記錄的顯示標(biāo)題

顯示程序

順序樹:

php代碼:--------------------------------------------------------------------------------

<?
/* 數(shù)據(jù)庫連接 */
mysql_connect();
mysql_select_db('tree');

/* 樹狀顯示的遞歸函數(shù) */
function tree($parentid = 0) {
    /*執(zhí)行sql查詢,獲取記錄的標(biāo)題和id*/
    $sql = "select topic,id from tree1 where parentid = $parentid order by id asc";
    $rs = mysql_query($sql);
    /* 縮進*/
    echo("<ul>");
    while($ra = mysql_fetch_row($rs)) {
        /* 顯示記錄標(biāo)題 */
        echo('<li>'.$ra[0].'</li>');
        /* 遞歸調(diào)用 */
        tree($ra[1]);
    }
    echo("</ul>");
}
tree();
?>

--------------------------------------------------------------------------------


逆序樹:

php代碼:--------------------------------------------------------------------------------

<?
/* 數(shù)據(jù)庫連接 */
mysql_connect();
mysql_select_db('tree');

/* 樹狀顯示的遞歸函數(shù) */
function tree($parentid = 0) {
    /*執(zhí)行sql查詢,獲取記錄的標(biāo)題和id*/
    $sql = "select topic,id from tree1 where parentid = $parentid order by id desc";
    $rs = mysql_query($sql);
    /* 縮進*/
    echo("<ul>");
    while($ra = mysql_fetch_row($rs)) {
        /* 顯示記錄標(biāo)題 */
        echo('<li>'.$ra[0].'</li>');
        /* 遞歸調(diào)用 */
        tree($ra[1]);
    }
    echo("</ul>");
}
tree();
?>

--------------------------------------------------------------------------------


插入數(shù)據(jù)程序

php代碼:--------------------------------------------------------------------------------

<?
/* 數(shù)據(jù)庫連接 */
mysql_connect();
mysql_select_db('tree');
$sql = "insert into tree (topic,parentid) values('樹3-1',3);";
mysql_query($sql);
?>

--------------------------------------------------------------------------------


2。排序字段法
此方法是通過在數(shù)據(jù)結(jié)構(gòu)中增加一個標(biāo)志記錄在整個樹中的順序位置的字段來實現(xiàn)的。特點是顯示速度和效率高。但在單個樹的結(jié)構(gòu)復(fù)雜的情況下,數(shù)據(jù)寫入效率有所不足。而且順序排列時候,插入,刪除記錄的算法過于復(fù)雜,故通常用逆序排列。

數(shù)據(jù)結(jié)構(gòu)(以mysql為例)

代碼:--------------------------------------------------------------------------------
CREATE TABLE `tree2` (
  `id` tinyint(3) unsigned NOT NULL auto_increment,
  `parentid` tinyint(3) unsigned NOT NULL default '0',
  `rootid` tinyint(3) unsigned NOT NULL default '0',
  `layer` tinyint(3) unsigned NOT NULL default '0',
  `orders` tinyint(3) unsigned NOT NULL default '0',
  `topic` varchar(50) default NULL,
  PRIMARY KEY  (`id`),
  KEY `parentid` (`parentid`),
  KEY `rootid` (`rootid`)
) TYPE=MyISAM

INSERT INTO `tree2` (`id`, `parentid`, `rootid`, `layer`, `orders`, `topic`) VALUES
  (1,0,1,0,0,'樹1'),
  (2,0,2,0,0,'樹2'),
  (3,0,3,0,0,'樹3'),
  (4,2,2,1,2,'樹2-1'),
  (5,4,2,2,3,'樹2-1-1'),
  (6,2,2,1,1,'樹2-2'),
  (7,1,1,1,4,'樹1-1'),
  (8,1,1,1,2,'樹1-2'),
  (9,1,1,1,1,'樹1-3'),
  (10,8,1,2,3,'樹1-2-1'),
  (11,7,1,2,5,'樹1-1-1'),
  (12,11,1,3,6,'樹1-1-1-1');
--------------------------------------------------------------------------------


顯示程序

php代碼:--------------------------------------------------------------------------------

<?
/* 數(shù)據(jù)庫連接 */
mysql_connect();
mysql_select_db('tree');

/* 選出所有根記錄id */
$sql = "select id from tree2 where parentid = 0 order by id desc";
$rs = mysql_query($sql);
echo("<ul>");
$lay = 0;
while($ra = mysql_fetch_row($rs)) {
    echo("<ul>");
    /* 選出此樹所有記錄,并按orders字段排序 */
    $sql = "select topic,layer from tree2 where rootid = $ra[0] order by orders";
    $rs1 = mysql_query($sql);
    while($ra1 = mysql_fetch_row($rs1)) {
        /* 縮進顯示 */
        if($ra1[1]>$lay) {
            echo(str_repeat("<ul>",$ra1[1]-$lay));
        }elseif($ra1[1]<$lay) {
            echo(str_repeat("</ul>",$lay-$ra1[1]));
        }
        /* 記錄顯示 */
        //echo("$ra1[1]>$lay");
        echo("<li>$ra1[0]</li>");
        $lay = $ra1[1];
    }
    echo("</ul>");
}
echo("</ul>");
?>

--------------------------------------------------------------------------------


插入數(shù)據(jù)程序

php代碼:--------------------------------------------------------------------------------

<?
/* 數(shù)據(jù)庫連接 */
mysql_connect();
mysql_select_db('tree');

/* 插入根記錄 */
$sql = "insert into tree2 (topic) values ('樹5')";
mysql_query($sql);
$sql = "update tree2 set rootid = id where id = ".mysql_insert_id();
mysql_query($sql);

/* 插入子記錄 */
$parentid = 5;//父記錄id
/* 取出 根記錄id,父記錄縮進層次,父記錄順序位置 */
$sql = "select rootid,layer,orders from tree2 where id = $parentid";
list($rootid,$layer,$orders) = mysql_fetch_row(mysql_query($sql));
/* 更新插入位置后記錄的orders值 */
$sql = "update tree2 set orders = orders + 1 where orders > $orders";
mysql_query($sql);
/* 插入記錄 */
$sql = "insert into tree2 (rootid,parentid,orders,layer,topic) values ($rootid,$parentid,".($orders+1).",".($layer+1).",'樹2-1-1-2')";
mysql_query($sql);?>

php技術(shù)實現(xiàn)樹狀結(jié)構(gòu)的兩種方法,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 男男女女爽爽爽视频免费 | 免费A级毛片无码无遮挡内射 | 性色爽爱性色爽爱网站 | 浴室里强摁做开腿呻吟的漫画男男 | 毛篇片在线观看 | 十分钟视频影院免费 | 国产精品久久久久久久人人看 | 伊人久久大香线蕉观看 | 成人a视频片在线观看免费 成人a毛片久久免费播放 | 亚洲地址一地址二地址三 | 国产婷婷午夜无码A片 | qvod 在线电影 | 亚洲三级在线看 | 国精产品999一区二区三区有限 | 被六个男人躁到一夜同性 | 国产欧美一本道无码 | 无人视频在线观看免费播放影院 | 全黄h全肉细节全文 | 久久伊人男人的天堂网站 | 樱桃视频高清免费观看在线播放 | 麻豆精品传媒2021网站入口 | 香蕉97超级碰碰碰碰碰久 | 97人摸人人澡人人人超一碰 | 国产午夜电影院 | 成年人视频在线免费观看 | 亚洲国产在线精品国 | G0GO人体大尺香蕉 | 亚洲国产精品综合久久一线 | 99re6久久在热线视频 | 电影果冻传媒在线播放 | 91久久综合精品国产丝袜长腿 | 精品手机在线1卡二卡3卡四卡 | 成年私人影院网站在线看 | 亚洲精品综合在线影院 | 欧美激情久久久久久久大片 | 99视频精品国产免费观看 | 亚洲精品国产品国语在线试看 | 国产精品AV视频一二三区 | 伊人久久精品线影院 | 91精品欧美一区二区三区 | 国产片MV在线观看 |