typescript - 如何在 TypeScript 中创建递归二叉树?

标签 typescript

我正在尝试在 TypeScript 中创建一个(通用)二叉树。

我创建了一个如下所示的界面:

interface Node<T> {
    (left?: T): Node<T>,
    (right?: T): Node<T>,
    (data: T): T
}

但是,当我这样做时,我收到一条错误消息,告诉我“'Node' 的所有声明都必须具有相同的类型参数。

是否可以在 TypeScript 中创建这样的结构,或者我需要以其他方式这样做吗?

没有泛型的实现似乎工作正常。

interface Node {
  left: Node,
  right: Node,
  data: any
}

最佳答案

我认为您正在寻找这个(我使用 TreeNode 而不是 Node 来避免 DOM 冲突):

interface TreeNode<T> {
    left?: TreeNode<T>;
    right?: TreeNode<T>;
    data: T;
}

这是使用它的示例( on the playground ):
let tree: TreeNode<string> = {
    data: "b",
    left: {
        data: "a"
    },
    right: {
        data: "c"
    }
};

console.log(tree.data);        // "b"
console.log(tree.left?.data);  // "a"
console.log(tree.right?.data); // "c"

关于typescript - 如何在 TypeScript 中创建递归二叉树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61745541/

相关文章:

Angular 响应式(Reactive)表单自定义控件异步验证

typescript - tsconfig 选项 "lib"有什么作用?

typescript - 为什么我的 angular2 应用程序初始化两次?

typescript - 推断通用参数未知

typescript - 推断链式函数的 ReturnType<>

javascript - Nestjs如何控制缓存?

angular - 如何发送在 Angular Material Autocomplete 中选择的属性的父对象?

javascript - 如何在 Angular 中的 Quill Js 编辑器中预填充数据

javascript - 使用 ts-node 的 Typescript 声明合并无法按预期工作

typescript - 你如何部署 Angular 应用程序?