`

用递归算法查找父节点下的所有叶子节点

 
阅读更多

父节点

----叶子节点

----子节点一

---------叶子节点

---------叶子节点

----子节点二

---------子节点三

----------------叶子节点

----------------叶子节点

如何得到父节点

采用递归算法,碰到叶子节点就加到列表里,不是叶子节点就对其进行循环再递归遍历

/**
	 * 向旗添加
	 * 实现将得到的目录的所有子目录和目录本身变成ID的LIST
	 * @param 目录ID
	 * @return  目录与其所有子目录组成的ID的LIST
	 * @throws ServiceException
	 */
	public List<Long> getAllPisTCategoryStr(PisTCategory obj)throws ServiceException{
		List<PisTCategory> listAll = new ArrayList<PisTCategory>();
		List<Long> list = new ArrayList<Long>();
		listAll = getAllPisTCategoryByParentId(obj);
	    if(listAll.size()!=0){
	         for(int i =0;i<listAll.size();i++){
	        	 list.add(listAll.get(i).getId());
	         }
	    }
	    return list;
	}
	
	/**
	 * 向旗添加
	 * 实现根据目录ID得到其所有子目录list
	 * @param 目录ID
	 * @return 所有子目录list
	 * @throws ServiceException
	 */
	public List<PisTCategory> getAllPisTCategoryByParentId(PisTCategory obj)throws ServiceException{
		List<PisTCategory> listAll = new ArrayList<PisTCategory>();
		List<PisTCategory> list = new ArrayList<PisTCategory>();
		List<PisTCategory> listtest = new ArrayList<PisTCategory>();
		try{
			if(obj.getLeaf() != null){
			if(obj.getLeaf()==1){
				listAll.add(obj);
				return listAll;
			}}
			obj.setLeaf(null);
			list =  getPisTCategoryByParentId_Leaf(obj);
			if(list.size()!=0){
			for(int i=0;i<list.size();i++){
					PisTCategory instance = new PisTCategory();
					instance = list.get(i);
					instance.setParentId(instance.getId());
					listtest = getAllPisTCategoryByParentId(instance);
					listAll.addAll(listtest);
			}
			
			}
		}catch(Exception e){
			e.printStackTrace();
			throw new ServiceException(this.getClass().getName()+e.getMessage());
		}
		return listAll;
	}

 

/**
	 * 向旗添加
	 * 实现根据父目录查询其子目录及其的所有商品信息
	 * @param categoryId
	 * @return
	 * @throws ServiceException
	 */
	public List<PisTProduct> getListPisTProductByCategoryId(Long categoryId)throws ServiceException{
		PisTCategory obj = new PisTCategory();
		obj = pisTCategoryService.getPisTCategoryById(categoryId);
		obj.setParentId(obj.getId());
		List<Long> list = pisTCategoryService.getAllPisTCategoryStr(obj);
		System.out.println(list.size());
		GetProductBySiteCategoryQueryObject qo = new GetProductBySiteCategoryQueryObject();
		qo.setSiteId(null);
		qo.setCategorys(list);
		try {
			return pisTProductDao.getListPisTProductBySiteId_CategoryIDs(qo);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
	
 
分享到:
评论

相关推荐

    基于递归算法在孩子兄弟法表示的树中查找任意节点

    本文旨在介绍如何利用递归算法在孩子兄弟表示法下的树中查找任意节点的双亲节点。 #### 递归算法概述 递归算法是一种通过直接或间接调用自身来解决问题的方法。它的设计基于数学归纳法的思想,能够将复杂问题分解...

    无限级树正向查找、反向查找例子【递归实现】

    正向查找,也称为自底向上查找,是从叶子节点开始,沿着父节点路径向上查找目标节点的过程。在无限级树中,我们从某个特定节点出发,遍历其父节点,直到找到目标节点或到达根节点为止。递归实现正向查找的C#代码示例...

    查找二叉树子结点的父结点的递规算法

    ### 查找二叉树子结点的父结点的递归算法 在计算机科学领域,二叉树是一种常见的数据结构,被广泛应用于多种算法和数据处理任务中。本篇文章将详细探讨一种用于查找二叉树中指定子节点的父节点的递归算法。 #### ...

    用递归算法实现无限极添加、删除、修改和移动菜单

    递归算法在这里可以遍历到目标位置的父节点,然后在适当的位置插入新节点。如果新节点还有子节点,这些子节点也会被递归地添加到树中。 **4. 删除菜单项** 删除菜单项需要找到目标节点并移除,同时考虑其对父节点和...

    【数据结构】——搜索二叉树的插入,查找和删除(递归&非递归)

    递归删除通常涉及替换节点的查找,而非递归删除则需要维护一个栈来跟踪路径,以便找到合适的替代节点并更新路径上的父节点。 在提供的代码中,可能包含了对这三种操作的实现,包括递归和非递归方法。使用VS2008...

    自制无限级tree(采用递归算法)

    在这个场景中,我们讨论的是使用递归算法来实现无限级树。递归是一种强大的编程技术,通过函数调用自身来解决问题或执行任务,特别适合处理层次结构的问题。 首先,我们需要理解递归的基本概念。递归由两部分组成:...

    connect_by_prior_递归算法

    ### Oracle中的Connect By Prior递归算法详解 #### 一、Connect By Prior 子句概述 在Oracle数据库中,`Connect By Prior`子句是一种非常有用的工具,尤其在处理具有层次结构的数据时。它允许用户以一种简洁的方式...

    二叉树三种遍历算法算法实现

    节点的数据元素通常存储在节点内部,而左右子节点则通过指针与父节点相连。 ### 2. 二叉树的遍历算法 遍历是访问二叉树所有节点的过程,确保每个节点都被访问且只被访问一次。遍历二叉树有多种方式,其中前序遍历...

    查找二叉排序树的双亲节点,并输出路径project

    在给定的项目"查找二叉排序树的双亲节点,并输出路径project"中,我们需要实现的功能是找到二叉排序树中特定节点的父节点,并输出从根节点到该节点的路径。 首先,理解二叉排序树的基本操作至关重要。插入操作保持...

    树的结构与算法

    计算叶子节点个数的算法通常很简单,可以通过递归的方式来实现。对于一个给定的树,我们可以定义一个函数,它接受一个节点作为参数。如果这个节点是叶子节点,那么函数返回1;如果节点有子节点,就对每个子节点递归...

    B_树的插入、删除、查找的算法(C语言描述).doc

    B-树是一种特殊的多路平衡查找树,设计用于在外存环境下高效地进行数据查找、插入和删除操作。这种数据结构特别适用于大型数据库和文件系统的索引构建,因为它的设计能够减少磁盘I/O操作,从而提高性能。以下是B-树...

    数据结构二叉树查找方式

    * 叶子节点:没有子节点的节点。 * 内部节点:有子节点的节点。 三、二叉树的链式存储结构 二叉树的链式存储结构是指使用链表来存储二叉树的节点信息。每个节点都有三个指针,分别指向左子节点、右子节点和父节点...

    二叉树代码 C语言 17个基本函数 递归 非递归

    根节点是树的起始点,没有父节点;叶子节点是不包含任何子节点的节点。 2. **C语言数据结构表示**: 在C语言中,我们通常通过结构体来定义二叉树节点,包含一个数据域(存储元素)和两个指向子节点的指针: ```c...

    Java二叉树算法实现:节点插入与遍历示例代码

    - **叶子节点**是没有子节点的节点。 - **父节点**是指向一个或两个子节点的节点。 #### 二、节点插入方法 本文档中的代码实现了节点的插入操作。具体来说,代码中定义了一个`BinaryTree`类,该类中包含一个`Node`...

    中科大软院算法导论实验二

    5. 递归处理:如果调整后父节点仍然是红色,需要继续向上检查并调整,直到根节点或找到黑色父节点为止。 6. 最终报告:记录插入过程中的关键步骤和调整策略,展示源代码实现。 在这个“中科大软院算法导论实验二”...

    算法学习:R树与R+树.ppt

    首先从R树中查找到记录该空间要素所在的叶子节点,这就是R树的查找。查找到该空间要素所在的叶子节点后,删除其对应的单元。如果删除后该叶子节点单元个数少于m,需要进行R树的压缩操作,将单元数过少的结点删除。...

    二叉树遍历的前驱和后继规则说明

    - 若是父节点的右子节点,且父节点有左子树,前驱是父节点左子树的最后一个访问节点,即沿着左子树向下,若无法继续向左,向右移动直到叶子节点。 3. **中序遍历找后继** - 节点有右子节点时,后继是右子节点的最...

    上机4 二叉树的基本操作.doc

    - 实现`Parent(T, e)`函数,用于查找指定非根节点`e`的父节点。 - 实现`LeftSibling(T, e)`和`RightSibling(T, e)`函数,用于查找指定节点`e`的左兄弟或右兄弟。 #### 四、程序代码解析 1. **创建二叉树**:通过...

    C++二叉树实验

    例如,一个`isCompleteTree`函数用于验证完全二叉树,一个`findParent`函数用于查找给定节点的父节点,以及一个`findLeaves`函数用于返回所有叶子节点的列表。 在"**zsx13**"这个文件中,可能包含了实现这些功能的...

Global site tag (gtag.js) - Google Analytics