递归函数是如何对二叉树进行操作的

How do recursive functions do operations on a binary tree?

本文关键字:操作 二叉树 递归函数      更新时间:2023-10-16

我不太理解这个概念。

 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只是沿着最左边节点的路径,忽略左边子树中最右边的节点。这是如何一步步进行的呢?

您忽略了一个事实,即当一个函数调用另一个函数并且内部函数返回时,另一个函数从它离开的地方恢复。

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

  1. 我们在根节点上调用preorderPrint

  2. 输出根节点的内容

  3. 调用左节点的preorderPrint

  4. 输出左节点的内容。它在NULL时调用preorderPrint两次,它不做任何事情,并返回。

  5. 恢复对preorderPrint的原始调用,调用根节点右指针的preorderPrint,该指针为NULL,并且不做任何事情。