目录树的实现

<!--#include file="conn.asp" -->
<table width="50%" bordercolor="#000000" align="left" border="1" cellpadding="0" cellspacing="0">
<tr>
<td><% call CreateMenu(0) %></td>
</tr>
</table>
<%
sub  CreateMenu(MenuID)
 set RsMenu=server.CreateObject("adodb.recordset")
 set RsSubMenu=server.CreateObject("adodb.recordset")
 sql="select * from category where parentid="&MenuID&" order by weizhi "
 RsMenu.open sql,conn,1,1
 if RsMenu.eof then exit sub
 response.Write "<table width=50% bordercolor=#fe0a0a border=1 cellspacing=0 cellpadding=0 align=center>"
  do until  RsMenu.eof
 response.Write "<tr><td>"
  RsSubMenu.open "select id from category where parentid="&RsMenu("id"),conn,1,1
 if not RsSubMenu.eof then
    HasChild=true
 else
  HasChild=false
  end if
 RsSubMenu.close
if HasChild then
 response.Write "<img width='18' height='18' src='images/plus.gif'id='img_"
 response.Write RsMenu("id")&"' border='0' style='cursor:hand' οnclick=javascript:expand('"&RsMenu("id")&"',true);>"
else
response.Write "&nbsp;&nbsp;&nbsp;"
end if
response.Write "<a href=javascript:expand("&RsMenu("id")&",true);>"
response.Write ""&RsMenu("menu")&"</a></td>"
 response.Write "</tr>"
 if HasChild then
 %>
<div id="menu_<%=RsMenu("id")%>" style="display:none"><tr align="right" id="menu_<%=RsMenu("id")%>" style="display:none"></td>
<% createMenu(RsMenu("id"))%></td></tr></div>
<%
end if
  RsMenu.movenext
  loop
   RsMenu.close
 response.Write "</table>"
 end sub
%>  

<script language="javascript">
function expand(id){
 if(document.all['menu_'+id]){
  var objtr=document.all['menu_'+id];
  var objimg=document.all['img_'+id];
  if (objtr.style.display=="none"){
        objmg.src="images/plus.gif";
        objtr.style.display="inline";
  }else{
  objtr.style.display="none";
  objmg.src="images/dashes.gif";
}
}
}

</script>

 

if HasChild then
 %>
<div id="menu_<%=RsMenu("id")%>" style="display:none"><tr align="right" id="menu_<%=RsMenu("id")%>" style="display:none"></td>
<% createMenu(RsMenu("id"))%></td></tr></div>
<%
end if%>

这里表格设置的隐藏不起任何作用,内容完全显示!哪位高手帮帮忙看看 啊

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个非常有趣的实验,涉及到了计算机操作系统中的核心概念。下面是一个简单的基于二叉链表的目录实现。 首先,我们需要定义一个目录节点类,它包含以下属性: - name:节点的名称 - is_directory:是否是目录 - parent:父节点 - left_child:左子节点 - right_child:右子节点 ```python class Node: def __init__(self, name, is_directory, parent=None, left_child=None, right_child=None): self.name = name self.is_directory = is_directory self.parent = parent self.left_child = left_child self.right_child = right_child ``` 然后,我们可以定义一个目录类,它包含以下操作: - 创建根节点 - 添加目录节点 - 添加文件节点 - 遍历目录 - 删除节点 ```python class DirectoryTree: def __init__(self): self.root = Node('/', True) def add_directory(self, path): current_node = self.root for name in path.split('/'): if name == '': continue child_node = self._find_child_node(current_node, name) if child_node is None: child_node = Node(name, True, current_node) if current_node.left_child is None: current_node.left_child = child_node else: current_node.right_child = child_node current_node = child_node def add_file(self, path): current_node = self.root names = path.split('/') filename = names[-1] for name in names[:-1]: if name == '': continue child_node = self._find_child_node(current_node, name) if child_node is None: child_node = Node(name, True, current_node) if current_node.left_child is None: current_node.left_child = child_node else: current_node.right_child = child_node current_node = child_node file_node = Node(filename, False, current_node) if current_node.left_child is None: current_node.left_child = file_node else: current_node.right_child = file_node def traverse(self): self._traverse_node(self.root) def delete(self, path): node = self.find(path) if node is None: return if node.left_child is None and node.right_child is None: self._delete_leaf_node(node) elif node.left_child is not None and node.right_child is not None: successor = self._find_successor(node) node.name = successor.name node.is_directory = successor.is_directory self._delete_leaf_node(successor) else: child_node = node.left_child if node.left_child is not None else node.right_child child_node.parent = node.parent if node.parent.left_child == node: node.parent.left_child = child_node else: node.parent.right_child = child_node def find(self, path): current_node = self.root for name in path.split('/'): if name == '': continue child_node = self._find_child_node(current_node, name) if child_node is None: return None current_node = child_node return current_node def _find_child_node(self, node, name): if node.left_child is not None and node.left_child.name == name: return node.left_child elif node.right_child is not None and node.right_child.name == name: return node.right_child else: return None def _traverse_node(self, node, depth=0): print(' ' * depth + node.name) if node.is_directory: if node.left_child is not None: self._traverse_node(node.left_child, depth + 1) if node.right_child is not None: self._traverse_node(node.right_child, depth) def _delete_leaf_node(self, node): if node.parent.left_child == node: node.parent.left_child = None else: node.parent.right_child = None def _find_successor(self, node): current_node = node.right_child while current_node.left_child is not None: current_node = current_node.left_child return current_node ``` 使用这个目录类,我们可以创建一个目录,添加目录和文件节点,遍历目录,删除节点等等。 ```python tree = DirectoryTree() tree.add_directory('/home') tree.add_directory('/home/user') tree.add_file('/home/user/file.txt') tree.add_directory('/home/user/documents') tree.add_file('/home/user/documents/document.pdf') tree.traverse() """ / home user file.txt documents document.pdf """ tree.delete('/home/user/documents/document.pdf') tree.traverse() """ / home user file.txt documents """ ``` 这个实现还有很多可以改进的地方,例如可以使用哈希表来加速查找操作,可以添加更多的错误检查等等。不过这个简单的实现已经足够演示目录的基本操作了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值