我在理解这个概念时遇到了麻烦。

 void preorderPrint( TreeNode *root ) {

    if ( root != NULL ) {  // (Otherwise, there's nothing to print.)
       cout << root->item << " ";      // Print the root item.
       preorderPrint( root->left );    // Print items in left subtree.
       preorderPrint( root->right );   // Print items in right subtree.
    }
 }


如何打印出二叉树中的节点?看起来它只是遍历树而没有打印除根项以外的任何内容。

此外,在我看来,与二叉树配合使用的递归函数只是沿直线遍历该树。即root-> left紧随路径,走到最左侧的节点,而忽略左侧子树中的右侧节点。这项工作如何逐步进行?

最佳答案

您遗漏了以下事实:当一个函数调用另一个函数而内部函数返回时,另一个函数从中断处继续执行。

考虑具有根节点和左节点的树。发生以下情况:


我们在根节点上调用preorderPrint。
输出根节点的内容。
它在左侧节点上调用preorderPrint。
这将输出左节点的内容。它对NULL调用preorderPrint两次,不执行任何操作,然后返回。
继续对preorderPrint的原始调用,在根节点的右指针NULL上调用preorderPrint,并且不执行任何操作。

10-06 07:30