C++中的二叉树被定义为一棵树,其中每个节点最多可以有两个子节点,也就是左子节点和右子节点。二叉树有不同的类型,如完整的、完全的、完美的、退化的等等。然而,在这篇文章中,我们将只讨论在Ubuntu 20.04中用C++实现一个简单的二叉树的方法。
C++中二叉树的遍历
二叉树可以用三种不同的方式进行遍历,即前序遍历、内序遍历和后序遍历。我们将在下面简要地讨论所有这些二叉树遍历技术。
前序遍历
二叉树中的前序遍历技术是指总是先访问根节点,然后是左子节点,再是右子节点。
顺序内遍历(In-Order Traversal)
二叉树中的内序遍历技术是指总是先访问左边的子节点,然后是根节点,然后是右边的子节点。
后序遍历
二叉树中的后序遍历技术是指总是先访问左边的子节点,接着是右边的子节点,然后是根节点。
在Ubuntu 20.04中用C++实现二叉树的方法
在这个方法中,我们不仅要教你在Ubuntu 20.04中用C++实现二叉树的方法,而且还要分享如何通过我们上面讨论的不同的遍历技术来遍历这棵树。我们创建了一个名为 "BinaryTree.cpp "的".cpp "文件,其中将包含二叉树实现的完整C++代码以及其遍历。然而,为了方便起见,我们将整个代码分解成不同的片段,以便于我们向你解释。以下五张图片将描述我们C++代码的各个片段。我们将逐一详细介绍这五个片段。

在上面图片中分享的第一个片段中,我们简单地包含了两个必要的库,即 "stdlib.h "和 "iostream "以及 "std "命名空间。之后,我们在 "struct "关键字的帮助下定义了一个结构 "node"。在这个结构中,我们首先声明了一个名为 "data "的变量。这个变量将包含我们二叉树的每个节点的数据。我们将这个变量的数据类型保持为 "char",这意味着二叉树的每个节点都将包含字符类型的数据。然后,我们在 "node "结构中定义了两个节点结构类型的指针,即 "left "和 "right",它们将分别对应于每个节点的左边和右边的孩子。
之后,我们有一个在二叉树中创建新节点的函数,参数为 "data"。这个参数的数据类型可以是 "char "或 "int"。这个函数将起到在二叉树中插入的作用。在这个函数中,我们首先为我们的新节点分配了必要的空间。然后,我们将 "node->data "指向传递给这个节点创建函数的 "data"。之后,我们将 "node->left "和 "node->right "指向 "NULL",因为在创建新节点的时候,它的左右两个孩子都是空的。最后,我们将新节点返回给这个函数。

现在,在上面显示的第二个片段中,我们有了对二叉树进行预排序遍历的函数。我们将这个函数命名为 "traversePreOrder",并将一个名为 "*temp "的节点类型参数传递给它。在这个函数中,我们有一个条件,将检查所传递的参数是否为空。只有这样,它才会进一步进行。然后,我们要打印 "temp->data "的值。之后,我们再次调用同一函数的 "temp->left "和 "temp->right "参数,这样左、右子节点也可以按预先顺序被遍历。

在上面显示的第三个片段中,我们有一个用于二叉树的内序遍历的函数。我们将这个函数命名为 "traverseInOrder",并将一个名为 "*temp "的节点类型参数传递给它。在这个函数中,我们有一个条件,将检查所传递的参数是否为空。只有这样,它才会进一步进行。然后,我们要打印 "temp->left "的值。之后,我们再次调用同一函数的 "temp->data "和 "temp->right "参数,这样根节点和右边的子节点也可以按顺序被遍历。

在上面显示的第四个片段中,我们有一个用于二叉树后序遍历的函数。我们将这个函数命名为 "traversePostOrder",并将一个名为 "*temp "的节点类型参数传递给它。在这个函数中,我们有一个条件,将检查所传递的参数是否为空。只有这样,它才会进一步进行。然后,我们要打印 "temp->left "的值。之后,我们再次调用同一函数的 "temp->right "和 "temp->data "参数,这样右边的子节点和根节点也可以按后序被遍历。

最后,在上面显示的最后一个代码片段中,我们有 "main() "函数,它将负责驱动整个程序。在这个函数中,我们创建了一个 "节点 "类型的指针 "*root",然后将字符 "A "传递给 "newNode "函数,以便这个字符可以作为我们二叉树的根。然后,我们将字符'B'传递给 "newNode "函数,使其成为根节点的左端子节点。之后,我们将字符'C'传递给 "newNode "函数,使其成为根节点的右部子节点。最后,我们将字符 "D "传递给 "newNode "函数,使其成为我们二叉树左节点的左子。
然后,我们在 "根 "对象的帮助下,逐一调用 "traversePreOrder"、"traverseInOrder "和 "traversePostOrder "函数。这样做首先会按前序打印我们二叉树的所有节点,然后是按顺序打印,最后是按后序打印。最后,我们有一个 "返回0 "语句,因为我们的 "main() "函数的返回类型是 "int"。你需要把所有这些片段写成一个单一的C++程序,这样它就能成功执行。
为了编译这个C++程序,我们将运行以下命令
$ g++ BinaryTree.cpp –o BinaryTree

然后,我们可以用下面的命令执行这段代码
$ . /BinaryTree

我们的C++代码中的三个二叉树遍历函数的输出结果如下图所示。

结语
在这篇文章中,我们向你解释了Ubuntu 20.04中C++中二叉树的概念。我们讨论了二叉树的不同遍历技术。然后,我们与你分享了一个广泛的C++程序,它实现了二叉树,并讨论了如何使用不同的遍历技术来遍历它。通过从这段代码中获得帮助,你可以方便地在C++中实现二叉树,并根据你的需要对其进行穿越。