首页 > 解决方案 > 删除递归数据结构中给定节点上方的所有内容

问题描述

我有一个表格的数据结构

node: { "name": "root";
        "children": [ node ]; }

问题底部还有另一个例子。

现在我想删除指定节点之上的所有节点,只保留剩余的子树。

例如,给定树 T

  A
 / \
B   C
   / \
  D   E

该函数getTree(T, 'C')应该返回

   C
  / \
 D   E

问题:有没有简单的方法来实现这个?

function getTree(json, node) {
    var tree = JSON.parse(json);
    /* QUESTION: how do I remove everything not below the node with name===node here?
}

PS:更大的例子:

var tree = [
  {
    text: "Parent 1",
    nodes: [
      {
        text: "Child 1",
        nodes: [
          {
            text: "Grandchild 1"
          },
          {
            text: "Grandchild 2"
          }
        ]
      },
      {
        text: "Child 2"
      }
    ]
  },
  {
    text: "Parent 2"
  },
  {
    text: "Parent 3"
  },
  {
    text: "Parent 4"
  },
  {
    text: "Parent 5"
  }
];

编辑:好点:我应该提到节点名称是唯一的。

标签: javascriptdata-structures

解决方案


您可以迭代数组并查看节点是否具有所需的文本,或者嵌套节点是否有找到。

const
    getTree = (tree, text) => {
        let result;
        tree.some(node => result = node.text === text
            ? node
            : getTree(node.nodes || [], text)
        );
        return result;
    },
    tree = [{ text: "Parent 1", nodes: [{ text: "Child 1", nodes: [{ text: "Grandchild 1" }, { text: "Grandchild 2" }] }, { text: "Child 2" }] }, { text: "Parent 2" }, { text: "Parent 3" }, { text: "Parent 4" }, { text: "Parent 5" }];

console.log(getTree(tree, "Grandchild 1"));
console.log(getTree(tree, "Parent 1"));        
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读