我正在尝试编写一种更改树根的算法。
树表示为一个数组:['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