二叉搜索树构造

Binary Search Tree Construction

目前正在复习如何构造 BST,似乎有两种 "common" 构造方法。一种方法,如 this example,只需将所有内容放在 Node class 中,然后在 Node class 中执行所有操作。另一种方法是将其分解为 NodeBST class,然后从那里构建树。

我可以看到两者的吸引力,但是构建 s BST 的标准方法是什么?还是真的只是个人喜好?

没有充分的理由拥有一个单独的 BST class。它没有任何节点也没有的属性。任何节点也是 BST。

或者,没有充分的理由拥有一个节点 class,只是一个 BST class。

不管你叫什么,只有一个。

一棵二叉树(二叉搜索树是二叉树的一种特殊情况,它在每个节点都满足一个属性称为二叉搜索树属性)是一个递归 数据结构。二叉树是

  1. 无(表示为空),或
  2. 一个节点有三个(可选的四个)东西(一个键,一个左 child 和一个右 child)。

节点的可选第四部分可以是一个parent引用,它本身就是一棵树。此引用在几个有用的树操作中很有用,例如节点删除(甚至遍历)。

因此,二叉树可以由一个节点和 vice-versa 充分表示,并且不需要单独的 BST 或二叉树表示(例如,作为 'class'),因为二叉树可以被视为对其 "root" 节点的引用。

由于 BST 的平衡对其性能至关重要,因此请务必注意,在实践中(例如库代码),red-black 树通常会取代二叉(搜索)树。

就此表示而言,二叉树与 n-ary 树没有区别。


定义二叉树的时候不需要定义'subtree'。不需要单独的 BST class,因为一个节点足以代表一棵树。