C 二叉树的后序/前序遍历
我有一个预排序遍历函数,如下所示:C 二叉树的后序/前序遍历,c,recursion,tree,binary-tree,postorder,C,Recursion,Tree,Binary Tree,Postorder,我有一个预排序遍历函数,如下所示: void listInPreOrder(node* hd){ if(hd != NULL) { printf("%d, ", hd->value); listInPreOrder(hd->left); listInPreOrder(hd->right); } } 事实上,这是可行的,但我认为,让它后订单将是如此简单 void listInPostOrder(node* hd){ if(
void listInPreOrder(node* hd){
if(hd != NULL) {
printf("%d, ", hd->value);
listInPreOrder(hd->left);
listInPreOrder(hd->right);
}
}
事实上,这是可行的,但我认为,让它后订单将是如此简单
void listInPostOrder(node* hd){
if(hd != NULL) {
listInPreOrder(hd->left);
listInPreOrder(hd->right);
printf("%d, ", hd->value);
}
}
但不幸的是,它并没有起到很好的作用。我想知道如何解决这个问题,也许我做错了什么。或者可能是完全错误的 你如何改变这一点:
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);
}
}
你改一下怎么样:
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);
}
}
@OstapHnatyuk,你没有改变递归调用…两者的代码都是一样的,只是把打印行转置到了底部。还可以尝试发布其他代码,因为仅仅通过函数调用很难确定故障。例如,你是如何构造节点的……是的,它应该是这样的。我认为这就是后序遍历递归编码的方式。这就是我想知道的。就我所知,函数调用是正确的。我想知道邮购的功能是否有问题。@OstapHnatyuk。后序遍历的思想是,您也可以按后序遍历子树。看看谁的答案。@OstapHnatyuk,你没有改变递归调用……这两个调用的代码都是一样的,只是把打印行移到了底部。还可以尝试发布其他代码,因为仅仅通过函数调用很难确定故障。例如,你是如何构造节点的……是的,它应该是这样的。我认为这就是后序遍历递归编码的方式。这就是我想知道的。就我所知,函数调用是正确的。我想知道邮购的功能是否有问题。@OstapHnatyuk。后序遍历的思想是,您也可以按后序遍历子树。看看谁的答案。德普,是的。。每当我问这样的问题时,我都觉得自己像个白痴。但我花了10分钟试图理解为什么甚至没有阅读函数中的方法调用。@OstapHnatyuk在新的BST遍历递归实现中,这种情况经常发生,您(可能不会)感到震惊。几天前,我在回答一个不同的问题时确实这样做了,所以我对那种“德普”的感觉很熟悉。德普,是的。。每当我问这样的问题时,我都觉得自己像个白痴。但我花了10分钟试图理解为什么甚至没有阅读函数中的方法调用。@OstapHnatyuk在新的BST遍历递归实现中,这种情况经常发生,您(可能不会)感到震惊。几天前,我在回答一个不同的问题时确实做到了这一点,所以我对那种“德普”的感觉相当熟悉。