二叉树的后序/预订遍历

Man*_*son 1 c tree recursion binary-tree postorder

我有一个预订遍历函数,如下所示:

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

这实际上是有效的,但我认为将它发布到订单就像这样简单

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

但遗憾的是,它并没有那么好用.我想知道如何解决这个问题,也许我正在做一些简单的错误.或许这是完全错误的.

Who*_*aig 9

你怎么改变这个:

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

对此:

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

  • @OstapHnatyuk你会(可能不会)感到震惊的是,在BST遍历的新递归实现中这种情况经常发生.我几天前在回答一个不同的问题时,确实做了这个*,所以我对这种"derp"的感觉非常贴心. (2认同)