找到树中指定id的所有父节点

const data = [{
    id: 1,
    children: [{
        id: 2,
        children: [{
            id: 3,
        }, {
            id: 4,
        }],
    }],
}, {
    id: 5,
    children: [{
        id: 6,
    }],
}];

let nodes = [];
function getParentNodes(id, tree) {
    _getParentNodes([], id, tree);
    return nodes;
}

function _getParentNodes(his, targetId, tree) {
    tree.some((list) => {
        const children = list.children || [];
        if (list.id === targetId) {
            nodes = his;
            return true;
        } else if (children.length > 0) {
            const history = [...his];
            history.push(list);
            return _getParentNodes(history, targetId, children);
        }
    })
}

  要找到一颗树中指定id的那个节点很简单。如果要找到指定的所有父节点,转换一下思路就是将深度遍历的每条顺序都记录下来,直到找到了指定id的节点时,输出该条记录。

  那么仅仅需要在每次遍历时,将上一次的记录传过去即可。

原文地址:https://www.cnblogs.com/youyouluo/p/11546462.html

时间: 2024-11-05 22:44:02

找到树中指定id的所有父节点的相关文章

Oracle树查询(查询所有子节点,父节点等等)_转载

Oracle树查询(查询所有子节点,父节点等等) 转载 2016年01月14日 10:11:55 Oracle树查询的最重要的就是select...start with... connect by ...prior 语法了.依托于该语法,我们可以将一个表形结构的中以树的顺序列出来.在下面列述了Oracle中树型查询的常用查询方式以及经常使用的与树查询相关的Oracle特性函数等,在这里只涉及到一张表中的树查询方式而不涉及多表中的关联等. 以我做过的一个项目中的表为例,表结构如下: Sql代码 1

zTree通过指定ID找到节点并选中

zTree = $.fn.zTree.getZTreeObj("treeDemo");//treeDemo界面中加载ztree的div var node = zTree.getNodeByParam("id",pid ); zTree.cancelSelectedNode();//先取消所有的选中状态 zTree.selectNode(node,true);//将指定ID的节点选中 zTree.expandNode(node, true, false);//将指定I

关于删除树中指定节点的实例分析

Tree *Delete(Tree *T,int n) { //将树中指定节点删除的函数 Tree *tmp; if(T==NULL) return NULL; if(T->element==n) { if(T->right==NULL) //如果没有右子树,即只有一个该节点儿子左子树 { //则直接删除 tmp=T; T=T->left; //用左子树节点代替父节点 free(tmp); } else //如果右子树存在 { tmp=T->right; while(tmp->

vue_elementUI_ tree树形控件 获取选中的父节点ID

el-tree 的 this.$refs.tree.getCheckedKeys() 只可以获取选中的id 无法获取选中的父节点ID想要获取选中父节点的id;需要如下操作1. 找到工程下的node_modules文件夹 然后查找 element-ui.common.js文件 node_modules\element-ui\lib\element-ui.common.js2. 按Ctrl+F搜索TreeStore.prototype.getCheckedKeys这个方法3. 把// if (chi

SQL查询指定节点及其所有父节点的方法

--查询ID = '009'的所有父节点 SET @ID = '009' ;WITH T AS ( SELECT ID , PID , NAME FROM TB WHERE ID = @ID UNION ALL SELECT A.ID , A.PID , A.NAME FROM TB AS A JOIN T AS B ON A.ID = B.PID ) SELECT * FROM T ORDER BY ID /* ID PID NAME ---- ---- ---------- 001 NULL

Ztree 指定ID节点的选中 和 指定ID节点的展开

直接代码 然后在给大家解释 var treeObj = $("#treeDemo"); $.fn.zTree.init(treeObj, setting, Znode1); zTree_Menu = $.fn.zTree.getZTreeObj("treeDemo"); var node = zTree_Menu.getNodeByParam("id",pid ); zTree_Menu.selectNode(node,true);//指定选中I

Tree 通过父id找所有子节点

//TableName 表名 ParentID 父节点 ; WITH ret AS(SELECT * FROM SysBest_Role WHERE ID = Parentid UNION ALL SELECT t.* FROM TableName t INNER JOIN ret r ON t.ParentID = r.ID) SELECT * FROM ret w

使用jquery获取父元素或父节点的方法

jquery获取父元素方法比较多,比如parent(),parents(),closest()这些都能帮你实现查找父元素或节点,下面我们来一一讲解: <ul class="parent1"> <li><a href="#" id="item1">jquery获取父节点</a></li> <li><a href="#">jquery获取父元素&l

16、Cocos2dx 3.0游戏开发找小三之Node:父节点、子节点、傻傻分不清楚

重开发者的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/30476133 Cocos2d-x 采用了场景.层.精灵的层次结构来组织游戏元素, 与此同时,这个层次结构还对应了游戏的渲染层次,因此游戏元素可以组织成树形结构,称作渲染树. Cocos2d-x 把渲染树上的每一个游戏元素抽象为一个节点,即 Node. 一切游戏元素都继承自 Node,因此它们 都具有 Node 所提供的特性. Node 定义了一个可绘制