2011-11-29 67 views
0

我在我的代碼中收到解析錯誤。我可能錯過了一些愚蠢的東西......但在盯着它看後,我無法弄清楚什麼是錯的。二進制搜索樹無法正常工作? (解析錯誤)

BinaryTree.cpp:26:錯誤在第26行開始前解析錯誤「新
BinaryTree.cpp:31:分析前錯誤 ';'

....等等等等......任何想法?

#include <cstdlib> 
#include <iostream> 

using namespace std; 

class BinaryTree{ 

struct node{ 
    int data; 
    node *left; 
    node *right; 
    }; 

    node *root; 

    public: 
    BinaryTree(int); 
    void addNode(int); 
    void inorder(); 
    void printInorder(node); 
    int getHeight(); 
    int height(node); 
}; 

BinaryTree::BinaryTree(int data){ 
    node *new = new node; 
    new->data = data; 
    new->left = NULL; 
    new->right = NULL; 

    root = new; 
} 

void BinaryTree::addNode(int data){ 
    node *new = new node; 
    new->data = data; 
    new->left = NULL; 
    new->right = NULL; 

    node *current; 
    node *parent = NULL; 
    current = root; 

    while(current){ 
     parent = current; 
     if(new->data > current->data) current = current->right; 
     else current = current->left; 
    } 

    if(new->data < parent->data) parent->left = new; 
    else parent->right = new; 
} 

void BinaryTree::inorder() 
    printInorder(root); 
} 

void BinaryTree::printInorder(node current){ 
    if(current != NULL){ 
    if(tree->left) printInorder(tree->left); 
    cout<<" "<<tree->data<<" "; 
    if(tree->right) printInorder(tree->right); 
    } 
    else return; 
} 

int BinaryTree::getHeight(){ 
    return height(root); 
} 

int BinaryTree::height(node new){ 
    if (new == NULL) return 0; 
    else return max(height(new->left), height(new->right)) + 1; 
} 


int main(int argCount, char *argVal[]){ 
    int number = atoi(argVal[1]); 
    BinaryTree myTree = new BinaryTree(number); 

    for(int i=2; i <= argCount; i++){ 
    number = atoi(argVal[i]); 
    myTree.addNode(number); 
    } 

    myTree.inorder(); 
    int height = myTree.getHeight(); 
    cout << endl << "height = " << height << endl; 

    return 0; 
} 

回答

3

new是一個C++關鍵字。您不得將其用作標識符(例如變量名稱)。

在任何情況下,你的構造會過得更好爲:

BinaryTree::BinaryTree(int data) : root(new node) { /* ... */ } 

而且你的類作爲一個整體很可能​​會與unique_ptr<Node>好多了斷。

3

新是在C關鍵字++,你不能說出與字變量,所以

node *new = new node; 

是非法