2016-03-27 271 views
0

我刚开始学习Binary Trees并继续尝试在C中实现我自己。我有点失落,为什么只有InOrder遍历正确显示,而另外两个错误。我真的不知道这一点。我甚至直接尝试插入节点,结果是一样的。二叉搜索树遍历

#include <stdio.h> 
#include <stdlib.h> 
#include <stdbool.h> 

struct Node 
{ 
    int val; 
    struct Node *left; 
    struct Node *right; 
}; 

//Allocate Memory for New Node 
struct Node* getNewNode(int val) 
{ 
    struct Node * ptr = (struct Node*)malloc(sizeof(struct Node)); 
    ptr->val = val; 
    ptr->left = NULL; 
    ptr->right = NULL; 
    return ptr; 
} 
//Insert Node in Binary Search Tree 
struct Node* insertNode(struct Node* root,int val) 
{ 
    if(root == NULL) 
    { 
     root = getNewNode(val); 
    } 
    else if(val <= root->val) 
    { 
     root->left = insertNode(root->left,val); 
    } 
    else 
    { 
     root->right = insertNode(root->right,val); 
    } 
    return root; 

} 
void printInorder(struct Node* root) 
{ 
    if(root == NULL) return; 
    printInorder(root->left); 
    printf("%d ",root->val); 
    printInorder(root->right); 
} 
void printPostOrder(struct Node* root) 
{ 
    if(root == NULL) return; 
    printInorder(root->left); 
    printInorder(root->right); 
    printf("%d ",root->val); 
} 
void printPreOrder(struct Node*root) 
{ 
    if(root == NULL) return; 
    printf("%d ",root->val); 
    printInorder(root->left); 
    printInorder(root->right); 
} 
bool search(struct Node* root,int val) 
{ 
    if(root == NULL) 
    { 
     return false; 
    } 
    else if(val == root->val) 
    { 
     return true; 
    } 
    else if(val < root->val) 
    { 
     return search(root->left,val); 
    } 
    else 
    { 
     return search(root->right,val); 
    } 
} 
int main(void) 
{ 
    struct Node * root = NULL; //Tree is Empty 
    root = insertNode(root,15); 
    root = insertNode(root,10); 
    root = insertNode(root,8); 
    root = insertNode(root,12); 
    root = insertNode(root,20); 
    root = insertNode(root,17); 
    root = insertNode(root,25); 
    printf("Printing In-Order: \n"); 
    printInorder(root); 
    printf("\nPrinting Post-Order: \n"); 
    printPostOrder(root); 
    printf("\nPrinting Pre-Order: \n"); 
    printPreOrder(root); 

    // if(search(root,11)) 
    // { 
    // printf("\nValue Found\n"); 
    // } 
    // else 
    // { 
    // printf("\nValue Not Found\n"); 
    // } 

    return 0; 
} 

请帮我理解,如果我这样做是错误的,或者我对遍历的理解是错误的。 输出如下: output terminal

回答

0

您在printPostOrderprintPreOrder有复制粘贴错误 - 他们都呼吁printInorder,他们应该被自称。

+0

哈哈谢谢:)昨晚没睡太多 –