微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

删除递归数据结构中给定节点上方的所有内容

如何解决删除递归数据结构中给定节点上方的所有内容

我有一个表单的数据结构

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"
  }
];

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

解决方法

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

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; }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。