我已经制作了一个二叉树,我试图进行后序遍历。我已经进行了前序遍历 - 我虽然是我需要的。但谷歌搜索遍历后,我发现它是我需要的后序。 我的想法是关于遍历,首先是左边出来,然后右边然后是根(它是后序对吗?))。 我试图实现它,但看起来有点奇怪
public static <E> String postorder(BinaryTree<E> t, Position<E> v){
String tree = "";
if(t.hasLeft(v)){
tree += postorder(t, t.left(v));
}
tree += v.element() +", ";
if(t.hasRight(v)){
tree += postorder(t, t.right(v));
}
return tree;
}
我的树是:
45
/ \
22 77
/ \ \
11 30 90
\ / /
15 25 88
我的结果应该是在我的知识之后 15,11,25,30,22,88,90,77,45 但它是 11,15,22,25,30,45,77,88,90
任何人都可以看到我做错了什么 - 我尝试了很多东西。什么都行不通。
答案 0 :(得分:2)
您正在preorder
的实施中致电postorder
。
更新:现在看起来您正在进行按顺序遍历,但正在调用 后期订单。
移动此行:
tree += v.element() +", ";
到最后(在返回之前)。
答案 1 :(得分:0)
void preOrder(BSTNode *root){
while(root != NULL){
cout<<root->data<<endl;
preOrder(root->left);
preOrder(root->right);
}
}
void postOrder(BSTNode *root){
while(root != NULL){
preOrder(root->left);
preOrder(root->right);
cout<<root->data<<endl;
}
}
void inOrder(BSTNode *root){
while(root != NULL){
preOrder(root->left);
cout<<root->data<<endl;
preOrder(root->right);
}
}