面试题答案
一键面试类型定义思路
- 首先定义树节点类型,由于节点具有任意属性,使用
Record<string, any>
来表示属性。 children
数组存放子节点,类型为当前树节点类型的数组,形成递归类型。
克隆函数实现思路
- 递归遍历树的每个节点。
- 为每个节点创建一个新的对象,复制其属性。
- 递归克隆子节点数组,并将克隆后的子节点数组赋值给新节点的
children
属性。
代码实现
// 树节点类型定义
type TreeNode<T = any> = {
[key: string]: T;
children?: TreeNode<T>[];
};
// 深度克隆函数
function deepCloneTree<T>(tree: TreeNode<T>): TreeNode<T> {
const newNode: TreeNode<T> = {...tree };
if (tree.children) {
newNode.children = tree.children.map(child => deepCloneTree(child));
}
return newNode;
}