【问题标题】:Post-order/Pre-order Traversal of Binary Tree二叉树的后序/前序遍历
【发布时间】:2012-11-28 16:21:18
【问题描述】:

我有一个如下所示的预购遍历函数:

void listInPreOrder(node* hd){
if(hd != NULL) {
        printf("%d, ", hd->value);
        listInPreOrder(hd->left);
        listInPreOrder(hd->right);
    }
}

这实际上是可行的,但我认为使它成为 post order 就像这样简单

void listInPostOrder(node* hd){
if(hd != NULL) {
        listInPreOrder(hd->left);
        listInPreOrder(hd->right);
        printf("%d, ", hd->value);
    }
}

但不幸的是,它并没有那么好用。我想知道如何解决这个问题,也许我做错了一些简单的事情。或者它可能是完全错误的。

【问题讨论】:

  • @OstapHnatyuk,你没有改变递归调用......
  • 两者的代码相同,只是将打印行移到了底部。也尝试发布其他代码,因为仅通过函数调用很难确定故障。例如。你如何构造节点...
  • 是的,它应该是这样的。我认为这就是后序遍历的递归编码方式。这就是我想知道的。据我所知,函数调用是正确的。请问下单功能是不是有问题。
  • @OstapHnatyuk。后序遍历的想法是您也按后序遍历子树。查看 WhosCraigs 的答案。

标签: c recursion tree binary-tree postorder


【解决方案1】:

你如何改变这个:

void listInPostOrder(node* hd){
if(hd != NULL) {
        listInPreOrder(hd->left);  // PRE order ???
        listInPreOrder(hd->right); // PRE order ???
        printf("%d, ", hd->value);
    }
}

到这里:

void listInPostOrder(node* hd){
if(hd != NULL) {
        listInPostOrder(hd->left);
        listInPostOrder(hd->right);
        printf("%d, ", hd->value);
    }
}

【讨论】:

  • Derp,是的.. 每当我问这样的问题时,我都觉得自己像个白痴。但是我花了 10 分钟试图理解为什么甚至没有阅读函数中的方法调用。
  • @OstapHnatyuk 你会(可能不会)对在 BST 遍历的新递归实现中这种情况发生的频率感到震惊。几天前,我确实在回答另一个问题时这样做了,所以我对那种“derp”的感觉非常熟悉。
猜你喜欢
  • 1970-01-01
  • 2021-03-08
  • 2023-01-09
  • 2018-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-13
相关资源
最近更新 更多