多叉树的遍历和查找
在key为NodeId的结点的子树中查找一个key为inNodeId的结点
// 传入对象而不是数组 getIsMyChild(rootNode, inNodeId, NodeId) { if (null == rootNode) return null; if (rootNode.key == NodeId) { // 找到该结点后将其所有后代存到itsChildren数组 // 返回“inNodeId是否在NodeId的后代里” return (this.getChildrenOfTree(rootNode, []).indexOf(inNodeId) >= 0); } else { //没有孩子就结束并返回父节点 if (rootNode.children.length <= 0) return null; // 有孩子就遍历孩子 for (let i = 0; i < rootNode.children.length; i++) { return this.getIsMyChild(rootNode.children[i], inNodeId, NodeId); } } },
遍历该树并把孩子都放进一个数组里
getChildrenOfTree(rootNode, arr) { let itsChild = rootNode.children; // rootNode没有孩子就结束并返回父节点 if (itsChild.length <= 0) return; // 有孩子就遍历孩子 for (let i = 0; i < itsChild.length; i++) { // 把孩子放进数组 arr.push(itsChild[i].key);//中左右 this.getChildrenOfTree(itsChild[i], arr); } },