更改树根

时间:2018-06-21 18:09:06

标签: javascript algorithm recursion tree

我正在尝试编写一种更改树根的算法。 树表示为一个数组:['A', ['B', ['D']], ['C']]

我写了一些使用递归的算法,但它不适用于我编写的所有测试用例。找不到错误。也许有人还记得如何解决该问题的示例。

我的代码:

   const change_root_ = (node: Tree, target: string, prevNode: Tree): Tree => {
      if (!node) {
        return node;
      }

      const nodeLabel = node[0];

      if (nodeLabel === target) {
        return [
          ...node,
          prevNode
        ];
      }

      const leftNode = node[1];
      if (leftNode) {
        return change_root_(
          leftNode,
          target,
          [...node.slice(0, 1), ...node.slice(2)]
        );
      }

      const rightNode = node[2];
      return change_root_(rightNode, target, [...node.slice(0, 2)]);
    }

    const change_root = (tree: Tree, newRootLabel: string): Tree => {
      return change_root_(tree, newRootLabel);
    };

在这里您可以在底部看到实际的代码+测试用例。 http://jsbin.com/noyeponove/edit?js,console,output

0 个答案:

没有答案