我在Wikipedia中看到了这个二叉树的定义:
定义二叉树的另一种方法是在有向图上的递归定义。二叉树是:
单个顶点。
通过获取两个二叉树,添加顶点,并将从新顶点指向的边添加到每个二叉树的根来形成的图。
如何拥有一个带有一个根和一个左子的二叉树,如下所示:
O
/
O
这是一棵二叉树,对吗?我在这里缺少什么?
请不要只说“维基百科可能是错的”,我也在其他一些地方看过这个定义。
答案 0 :(得分:2)
正确。树可以是空的(无)
假设你有两棵树:一棵有一个顶点,一棵是空的(nil)。它们看起来像这样:
O .
请注意,我在(零)树上使用了一个点。
然后我添加一个新的顶点,从新顶点到现有的两个树的边(注意我们不从现有树中获取边并将它们连接到新的顶点 - 这是不可能的。)。所以它现在看起来像:
O
/ \
O .
由于没有绘制到(nil)的边,所以最后是结尾:
O
/
O
我希望它澄清一下。
答案 1 :(得分:0)
这取决于你用于二元树的算法:对于冰淇淋,有很多种口味:)
一个例子是节点上有节点指针和叶子指针的混合,以及在完整插入新值时决定创建第二个节点(它是根节点还是另一个节点)的平衡系统节点:通过拆分它而不是创建根和2个叶子,创建另一个节点要经济得多。
答案 2 :(得分:0)
维基百科可能是错的。二叉树是有限的数据结构,必须允许子树为空,否则二叉树将是无限的。递归定义二叉树的基本情况必须允许单个节点或空树。
Touch of Class: An Introduction to Programming Well Using Objects and Contracts, by Bertrand Meyer, Springer Verlag, 2009. © Bertrand Meyer, 2009.的第14.4节对二叉树有更好的递归定义
Definition: binary tree
A binary tree over G, for an arbitrary data type G, is a finite set of items called
nodes, each containing a value of type G, such that the nodes, if any, are
divided into three disjoint parts:
• A single node, called the root of the binary tree.
• (Recursively) two binary trees over G, called the left subtree and right subtree.
The definition explicitly allows a binary tree to be empty (“the nodes, if any”).
Without this, of course, the recursive definition would lead to an infinite
structure, whereas our binary trees are, as the definition also prescribes, finite.
If not empty, a binary tree always has a root, and may have: no subtree; a
left subtree only; a right subtree only; or both.