// 定义树形数据结构的类型
interface TreeNode<T> {
data: T;
children: TreeNode<T>[];
}
// 递归遍历树形结构并操作节点数据的函数
function traverseTree<T>(node: TreeNode<T>, action: (data: T) => void) {
// 对当前节点数据执行操作
action(node.data);
// 递归遍历子节点
node.children.forEach(child => traverseTree(child, action));
}
// 示例用法
const tree: TreeNode<number> = {
data: 1,
children: [
{
data: 2,
children: [
{ data: 4, children: [] },
{ data: 5, children: [] }
]
},
{
data: 3,
children: [
{ data: 6, children: [] },
{ data: 7, children: [] }
]
}
]
};
// 定义打印节点数据的操作
const printData = (data: number) => console.log(data);
// 遍历树并打印节点数据
traverseTree(tree, printData);
- 定义树形结构类型:通过
interface TreeNode<T>
,使用泛型T
来表示节点中数据的类型,使得这个树形结构可以容纳不同类型的数据。
- 实现递归遍历函数:
traverseTree
函数接受一个树节点和一个操作函数action
,该操作函数接受节点数据类型T
作为参数。在函数内部,首先对当前节点数据执行action
,然后递归地对每个子节点调用traverseTree
。
- 示例用法:创建一个包含数字数据的树形结构,并定义一个打印数据的操作函数
printData
,最后调用traverseTree
函数遍历树并执行打印操作。这样,通过泛型增强了代码的灵活性和类型安全性,使得相同的遍历逻辑可以适用于不同数据类型的树形结构。