2017-07-02 21 views
-2

我應該採取的二叉樹的輸入遞歸爲:以二叉樹作爲輸入(遞歸地)

10真20真40假假真50假假真30真60假假真73虛假

這樣創建的樹應該是: -

 10 
    20  30 
40 50 60 73 

我創建了無法創建這棵樹的功能,什麼是錯的代碼?

node* takeInput() { 
    int data; 
    string a; 

    cin>>data>>a; 
    node*n = NULL; 

    if(a=="true") { 
     n = new node(data); 
     n->left = takeInput(); 
     n->right = takeInput(); 
    } 
    if(a=="false") { 
     return NULL; 
    } 
    return n; 
} 
+0

解釋你的輸入! –

+0

@RajeevSingh如果一個節點有lchild或者rchild,那麼它的「真」或者「假」。 –

+0

@RajeevSingh例如'40 false false'意味着它沒有leftchild和rightchild。 「30真60假虛假73虛假」意味着30已經離開了孩子60並且60沒有孩子(60假假),並且30有正確的孩子也是「真73」,其中73沒有孩子(73假假)。 –

回答

1

以輸入爲序遍歷樹...

  1. 先輸入根節點。
  2. 然後對左子樹進行輸入(如果存在)。
  3. 然後如果存在,則輸入右子樹的輸入。

代碼:

void takeInput(Node* &node) { 
    string left, right; 
    int data; 
    cin >> data; // input for root node 
    node = new Node(data); 

    cin >> left; 
    if(left == "true") { 
     takeInput(node->left); // taking input for left subtree 
    } 

    cin >> right; 
    if(right == "true") { 
     takeInput(node->right); // taking input for right subtree 
    } 
} 

Node* InputBinaryTree() { 
    Node *root; 
    takeInput(root); 
    return root; 
}