您好,欢迎访问一九零五行业门户网

理论上实现真正意义的无限级别菜单

菜单
很久没用php了,为了加深数据结构的基本知识(为考试准备),练习一下基本的算法,当然还是为了以后使用php做菜单的时候免得麻烦。
算法:数据结构中的最基本的树与二叉树的转换
大家凑合着看吧!因为只是为了熟悉一下算法,没有做具体的测试,同时对数据库的操作没有封装成类,大家如果需要可以自行修改或者和我联系!
your data must save like this:
id,topic,child_l,parent,child_r,content
file name:
show.inc.php
codes:
==================================================
class shows{
    var $items;
    var $the_stack;
    var $count=0;
function find($l_value) {
        for($j=1;$jitems[info_all];$j++) {
            if($l_value==$this->items[d_id][$j]])
            { return($j);exit; }
}
}
function m_l_r_list($i) {
if(($this->items[f_node][$i]]==0)&&($this->items[r_node][$i]]==0)&&($this->items[l_node][$i]]!=-1))
        {//if it is root node!!!
            echo
;
            echo ;
            echo pages_0($this->items[d_id][$i]]).?d_id=.$this->items[d_id][$i]].\ target=\rightframe\>.$this->items[node_value][$i]].;
            echo items[d_id][$i]]. target=\rightframe\>add;
            echo
;
            echo ;
            $i=$this->find($this->items[l_node][$i]]);
            $this->count=$this->count+2;
            $this->m_l_r_list($i);
            exit;
        }
        if(($this->items[f_node][$i]]==0)&&($this->items[r_node][$i]]==0)&&($this->items[l_node][$i]]==-1))
        {
            exit;
        }
         if(($this->items[f_node][$i]]!=0)&&($this->items[r_node][$i]]!=0)&&($this->items[l_node][$i]]!=0))
         {//if node have left and right child
             $current_node=$this->items[d_id][$i]];
if(($this->items[l_node][$i]]==-1)&&($this->items[r_node][$i]]==-1)) {
                $i=$this->find($this->items[f_node][$i]]);
                if(($this->items[r_node][$i]]==$current_node)) {//his parent use right point
                    $this->items[r_node][$i]]=-1;
                }
                if(($this->items[l_node][$i]]==$current_node)) {//his parent use left point
                    $this->items[l_node][$i]]=-1;
                }
                $this->count=$this->count-2;
                $this->m_l_r_list($i);
            }//if left child and right child have been visited up to his parent node
if(($this->items[l_node][$i]]!=-1)&&($this->items[r_node][$i]]!=-1)) {
                echo ;
                for ($k=0;$kcount;$k++) { echo ;}
                echo ;
                echo items[d_id][$i]].\ target=\rightframe\>.$this->items[node_value][$i]].;
                //echo $this->items[node_value][$i]];
                echo items[d_id][$i]]. target=\rightframe\>add;
                echo items[d_id][$i]].>del;
                echo
;
                echo ;
                $i=$this->find($this->items[l_node][$i]]);//visite left child node
                 $this->count=$this->count+2;
                 $this->m_l_r_list($i);
            }//if left child node and right child node have not been visited
if(($this->items[l_node][$i]]==-1)&&($this->items[r_node][$i]]!=-1)) {
                 $i=$this->find($this->items[r_node][$i]]);//visite right child node
                 $this->m_l_r_list($i);
            }//if left child node have been visited and right child node have not been visited
}
if(($this->items[f_node][$i]]!=0)&&($this->items[r_node][$i]]==0)&&($this->items[l_node][$i]]!=0))
        {//if node only have left child
            $current_node=$this->items[d_id][$i]];
            if($this->items[l_node][$i]]!=-1) {
                echo ;
                for ($k=0;$kcount;$k++) { echo ;}
                echo ;
                echo items[d_id][$i]].\ target=\rightframe\>.$this->items[node_value][$i]].;
                //echo $this->items[node_value][$i]];
                echo items[d_id][$i]]. target=\rightframe\>add;
                echo items[d_id][$i]].>del;
                echo
;
                echo ;
                $i=$this->find($this->items[l_node][$i]]);//visite left child node
                $this->count=$this->count+2;
                $this->m_l_r_list($i);
                exit;
            }//if his left child node have not been visited
if($this->items[l_node][$i]]==-1) {
                echo
;
                $i=$this->find($this->items[f_node][$i]]);
                if(($this->items[r_node][$i]]==$current_node)) {//his parent use right point
                    $this->items[r_node][$i]]=-1;
                }
                if(($this->items[l_node][$i]]==$current_node)) {//his parent use left point
                    $this->items[l_node][$i]]=-1;
                    $this->count=$this->count-2;
                }
                $this->m_l_r_list($i);
                exit;
            }//if his left child node have been visite,up to his parent node
}
        if(($this->items[f_node][$i]]!=0)&&($this->items[r_node][$i]]!=0)&&($this->items[l_node][$i]]==0))
        {//if node only have right child
            $current_node=$this->items[d_id][$i]];
            $j=$this->find($this->items[f_node][$i]]);
            if($this->items[r_node][$i]]!=-1) {
                echo ;
                for ($k=0;$kcount;$k++) { echo ;}
                echo items[d_id][$i]].\ target=\rightframe\>.$this->items[node_value][$i]].;
                //echo $this->items[node_value][$i]];
                echo items[d_id][$i]]. target=\rightframe\>add;
                echo items[d_id][$i]].>del;
                echo
;
                $i=$this->find($this->items[r_node][$i]]);//visite right child node
                $this->m_l_r_list($i);
                exit;
            }//if his right child node have not been visited
if($this->items[r_node][$i]]==-1) {
                $i=$this->find($this->items[f_node][$i]]);
                if(($this->items[r_node][$i]]==$current_node)) {//his parent use right point
                    $this->items[r_node][$i]]=-1;
                }
                if(($this->items[l_node][$i]]==$current_node)) {//his parent use left point
                    $this->items[l_node][$i]]=-1;
                    $this->count=$this->count-2;
                }
                $this->m_l_r_list($i);
                exit;
            }//if his right child node have been visite,up to his parent node
}
        if(($this->items[f_node][$i]]!=0)&&($this->items[l_node][$i]]==0)&&($this->items[r_node][$i]]==0))
        {//if this node haven't child node,print it and up to his parent
         //node his parent left or right child have been visited
            $current_node=$this->items[d_id][$i]];
            $j=$i;
            $i=$this->find($this->items[f_node][$i]]);//up to parent
            //echo $this->items[l_node][$i]];
            if(($this->items[r_node][$i]]==$current_node)) {//his parent use right point
                echo ;
                for ($k=0;$kcount;$k++) { echo ;}
                echo items[d_id][$j]].\ target=\rightframe\>.$this->items[node_value][$j]].;
                //echo $this->items[node_value][$j]];
                echo items[d_id][$j]]. target=\rightframe\>add;
                echo items[d_id][$j]].>del;
                echo
;
                echo
;
                $this->items[r_node][$i]]=-1;
}
            if(($this->items[l_node][$i]]==$current_node)) {//his parent use left point
echo ;
                for ($k=0;$kcount;$k++) { echo ;}
                echo items[d_id][$j]].\ target=\rightframe\>.$this->items[node_value][$j]].;
                //echo $this->items[node_value][$j]];
                echo items[d_id][$j]]. target=\rightframe\>add;
                echo items[d_id][$j]].>del;
                echo
;
                echo
;
                $this->items[l_node][$i]]=-1;
                $this->count=$this->count-2;
}
            $this->m_l_r_list($i);
            exit;
        }
}
function pages_0($d_id){//
        include(conn_db.php);
        $sql_query=select * from node_page where d_id=$d_id;
        $query_db=mysql_query($sql_query,$connect);
        $mypage=mysql_fetch_array($query_db);            
        include(conn_close.php);
        if($mypage[d_page]!='')
            {
                return $mypage[d_page];
            }    
        else return init.php;
        }
    function pages($d_id){//
        include(conn_db.php);
        $sql_query=select * from node_page where d_id=$d_id;
        $query_db=mysql_query($sql_query,$connect);
        $mypage=mysql_fetch_array($query_db);            
        include(conn_close.php);
        return $mypage[d_page];
        }
function showinfo_0($status){//
        include(conn_db.php);
        $sql_query=select * from department order by d_id;
        $query_db=mysql_query($sql_query,$connect);
        $info_all=mysql_num_rows($query_db);
        $this->items[info_all]=$info_all;
        if($status==1) {//when status=1 show all data gets from database
            $mnums=$info_all;
            }
        if($status==0) {//when status=0 show 6 messages gets from database
            $mnums=6;
            }
        for($i=1;$i            {
            $messages=mysql_fetch_array($query_db);
            $this->items[d_id][$i]]=$messages[d_id];
            $this->items[f_node][$i]]=$messages[f_node];
            $this->items[node_value][$i]]=$messages[node_value];
            $this->items[l_node][$i]]=$messages[l_node];
            $this->items[r_node][$i]]=$messages[r_node];
            }
        include(conn_close.php);
        }    
}
其它类似信息

推荐信息