首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL实现树的遍历

经常在一个表中有父子关系的两个字段,比如empno与manager,这种结构中需要用到树的遍历。...在Oracle 中可以使用connect by简单解决问题,但MySQL 5.1中还不支持(据说已纳入to do中),要自己写过程或函数来实现。...580',-1),          (16,'左上幻灯片',13),          (17,'帮忙',14),          (18,'栏目简介',17);   二、利用临时表和递归过程实现树的遍历...(mysql的UDF不能递归调用): [c-sharp] DELIMITER $$   USE `db1`$$   -- 从某节点向下遍历子节点   -- 递归生成临时表数据   DROP...目前来看无论哪种实现,效率都不太好,希望mysql自己能实现oracle 的connect by 功能,应该会比较优化。 参考:MySQL中进行树状所有子节点的查询

1.7K80
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    遍历

    前序遍历 前序遍历(DLR),是二叉树遍历的一种,也叫做先根遍历、先序遍历、前序周游,可记做根左右。前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。...(2)前序遍历左子树。 (3)前序遍历右子树 。 ? 前序遍历 需要注意的是:遍历左右子树时仍然采用前序遍历方法。...如右图所示二叉树 前序遍历结果:ABDECF 已知后序遍历和中序遍历,就能确定前序遍历。 中序遍历 中序遍历(LDR)是二叉树遍历的一种,也叫做中根遍历、中序周游。...在二叉树中,中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。 中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。...后序遍历首先遍历左子树,然后遍历右子树,最后访问根结点,在遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后遍历根结点。

    1.3K10

    图的遍历 --- 广度优先遍历

    广度优先遍历思路: 还是以之前深度优先遍历的图为例,如下: A B C D E F G H A[0, 1, 0, 0, 0, 1, 0, 1] B[1, 0, 1, 0, 0, 0,...1, 0] F[1, 0, 0, 0, 0, 0, 1, 0] G[0, 1, 0, 0, 1, 1, 0, 0] H[1, 0, 0, 1, 0, 0, 0, 0] 所谓广度优先,就类似二叉树的层序遍历...所在行所有未被访问过的1对应的顶点,发现没有; 接着搞A的第三个邻接顶点H所在的行,输出H所在行所有未被访问过的1对应的顶点,即D; A所在的行搞完了,就搞B、D、E……H所在的行,重复上面的操作,最终的遍历结果是...vertex的索引 int vertexIndex = vertexList.indexOf(vertex); // 从(priorVertexIndex + 1)开始遍历二维数组的第...(currentVertex, neighborVetex); } } } } /** * 广度优先遍历

    1.4K10

    图的遍历 --- 深度优先遍历

    在讲深度优先遍历之前,先来回顾一下图这种数据结构。 1. 是什么? 图,也是一种数据结构,其节点可以具有零个或者多个相邻元素,两个节点之间的连接称为边,节点也称为顶点,图表示的是多对多的关系。 ?...无向图的遍历: (1). 遍历分类: 图的遍历分为两种: 深度优先:depth first search,简称DFS。...类似于二叉树的层序遍历,具体的本文不做介绍。 (2). 深度优先算法步骤: 以开篇中的图为例: 访问A,并将A标记为已访问; 找到A的第一个未被访问邻接顶点,怎么找?...看矩阵: A B C D E F G H A[0, 1, 0, 0, 0, 1, 0, 1] 第一个1对应的是B,所以A的第一个邻接顶点是B,所以第二个遍历出来的是B,并且标记B为已访问...比如我要找A的第一个邻接顶点,那就遍历A所在的那一行,找到第一个1出现位置的索引,该索引对应的就是A的第一个邻接顶点。

    1.4K20

    Python深度遍历、广度遍历、递归函数遍历目录【详细讲解】

    Python通过os模块可以实现对文件或者目录的遍历,这里想实现这样的效果有三种方法,分别是递归函数遍历目录,栈深度遍历和队列广度遍历。下面就通过这三种方法来演练一下。...通过以下目录结构来演示 图片1.png 1.递归函数遍历目录 import os path = r'C:\Users\Administrator\Desktop\python知识总结\1.python自学网...(path, sp=''):     flist = os.listdir(path) # print(flist)     sp += '\t' for f in flist: # 遍历目录...import os path = r'C:\Users\Administrator\Desktop\python知识总结\1.python自学网-基础教程-视频源码\aaa' # 栈结构遍历又可以看做深度遍历...= 0: # 数据出队         dpath = queue.popleft() # 遍历目录中所有目录和文件,是目录继续遍历,不是目录打印出来         flist

    3.7K20

    深度优先遍历和广度优先遍历

    深度优先遍历和广度优先遍历 什么是 深度/广度 优先遍历?...深度优先遍历简称DFS(Depth First Search),广度优先遍历简称BFS(Breadth First Search),它们是遍历图当中所有顶点的两种方式。 这两种遍历方式有什么不同呢?...深度优先遍历 首先说说深度优先遍历的实现过程。这里所说的回溯是什么意思呢?回溯顾名思义,就是自后向前,追溯曾经走过的路径。...仍然以刚才的图为例,按照广度优先遍历的思想,我们首先遍历顶点0,然后遍历了邻近顶点1、2、3、4: 接下来我们要遍历更外围的顶点,可是如何找到这些更外围的顶点呢?...我们需要把刚才遍历过的顶点1、2、3、4按顺序重新回顾一遍,从顶点1发现邻近的顶点7、9;从顶点3发现邻近的顶点5、6。 像这样把遍历过的顶点按照之前的遍历顺序重新回顾,就叫做重放。

    1.5K31

    二叉树前序遍历、中序遍历、后序遍历、层序遍历的直观理解

    一棵二叉树由根结点、左子树和右子树三部分组成,若规定 D、L、R 分别代表遍历根结点、遍历左子树、遍历右子树,则二叉树的遍历方式有 6 种:DLR、DRL、LDR、LRD、RDL、RLD。...由于先遍历左子树和先遍历右子树在算法设计上没有本质区别,所以,只讨论三种方式: DLR–前序遍历(根在前,从左往右,一棵树的根永远在左子树前面,左子树又永远在右子树前面 ) LDR–中序遍历(根在中,从左往右...比如对于下面三个图,对于整棵树而言,A是根,A分别在最前面、中间、后面被遍历到。...中序遍历(LDR) 后序遍历(LRD) 2....层序遍历 层序遍历嘛,就是按层,从上到下,从左到右遍历,这个没啥好说的。 参考 1.

    2.1K40

    二叉树的先序遍历 中序遍历 后序遍历 层序遍历

    也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树 二叉树的遍历 先序遍历 :先遍历根节点,再遍历左节点,最后遍历右节点 中序遍历 :先遍历左节点,再遍历根节点,最后遍历右节点...后序遍历 :先遍历左节点,再遍历右节点,最后遍历根节点 层序遍历 : 自上而下,自左至右逐层访问树的结点的过程就是层序遍历 遍历方法的实现 先建立一棵树 用代码建立以上树 class Node...: //先序遍历 public static void preOrder(Node root){ if (root == null){ return;...//后序遍历 public static void postOrder(Node root){ if (root == null){ return;...//层序遍历 public void levelOrder(TreeNode root){ //不能使用递归 //可以借助一个队列来完成

    1.1K20
    领券