【问题标题】:Inorder traversal of binary search tree二叉搜索树的中序遍历
【发布时间】:2015-08-21 13:28:58
【问题描述】:

递归函数是如何工作的?在每种情况下,都是用 temp->left 和 temp->right 调用遍历 veing,或者所有 temp->left 调用都跟在所有 temp->right 调用之后?请对以下代码进行详细说明。

   void traverse(bst *temp)
  {   
       if(temp)
      {
          traverse(bst->left);
          printf("%d",temp->info);
          traverse(bst->right);
      }
  }

【问题讨论】:

  • 在纸上画一个简单的树,然后使用代码中的算法,遍历纸上的树。
  • 你应该写出你自己的作业答案,而不是试图让 SO 贡献者为你做:(
  • 不是中序遍历。

标签: c tree


【解决方案1】:

当你编辑你的代码时。所以根据那个 -

void traverse(bst *temp)  // function to traverse in a bst (parameter as root )
 {   
    if(temp)            // check temp (if not NULL then proceed)
     {
        traverse(bst->left);     // recursive call with root as left child and traverse left sub-tree till it goes to last node.
        printf("%d",temp->info); //  print value of data at current node
        traverse(bst->right);    // recursive call with root as right child and traverse right sub-tree till it goes to last node
     }
 }

traverse(bst->left); 通过此调用,它转到左子树的最后一个节点,当if 条件变为false 它返回到上一个调用并在该节点打印值,然后执行下一个递归调用traverse(bst->right);并遍历当前根的右子树,直到 temp 变为 NULL

【讨论】:

  • 是的,谢谢你..写得很快..已经编辑过了..你能告诉我它的工作原理吗?
  • @SuchiSmith 我已经编辑了答案。请看一下。
  • 如何控制甚至进入 printf 语句?每次从 traverse(bst->left) 转移控件时。 traverse(bst->left) 的所有调用都存储在堆栈帧中。当到达最后一个节点时,prntf statemnt 是如何执行的..然后控制如何切换到 traverse(bst->right) ?
  • @SuchiSmith 在最后一个节点temp 变为NULL 之后,它会返回到先前的递归调用并打印值,然后执行traverse(bst->right)
猜你喜欢
  • 2018-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多