为什么输入‘-’之后就无法继续输入了?

今天下午在做这个题目
图片说明
这里测试案例里面要输入‘-’表示后面没有子节点;
但是我自己测试的时候发现只要我输入了‘-’就无法继续输入

图片说明

像这样之后无论如何我都无法输入了;
但是我把表示后面没有子节点的条件修改成了-1,并用-1代替‘-’进行测试,却又可以正常输入,而且结果也是准确的。

图片说明

那么到底该怎么样才能让他输入成功啊;

这个是代码;

#include<iostream>
#include<stack>
#include<queue>
using namespace std;

typedef struct tree* Node;
typedef struct tree
{
    int LO=0;
    int l=0;
    int r=0;
    Node left=NULL;
    Node right=NULL;
}TreeNode;
typedef TreeNode* Root;

Root
BuiltTree()
{
    int n;
    Node* N;
    Root root=NULL;
    cin >> n;
    int* rt = new int[n];
    for (int i = 0; i < n; i++) {
        rt[i] = 0;
    }
    N = new Node[n];
    for (int i = 0; i < n; i++) {
        N[i] = new TreeNode;
        int l,r;
        N[i]->LO = i;
        cin >> l >> r;
        N[i]->l = l;
        N[i]->r = r;
        if (l != '-') { rt[l] = 1; }
        if (r != '-') { rt[r] = 1; }
    }
    for (int i = 0; i < n; i++) {
        if (!rt[i]) {
            root = N[i];
        }
    }
    delete[]rt;
    Node M = root;
    for (int i = 0; i < n; i++) {
        N[i]->l != '-'? N[i]->left = N[N[i]->l]: N[i]->left=NULL;
        N[i]->r != '-'? N[i]->right = N[N[i]->r]: N[i]->right=NULL;
    }
    delete[]N;
    return root;
}

void
BL(Root root)
{
    if (!root) { return; }
    queue<Node>Q;
    Node N = root;
    int first = 0;
    Q.push(N);
    while (!Q.empty() ){
        N = Q.front();
        Q.pop();
        if (N->left == NULL && N->right == NULL) {
            if (!first) {
                cout << N->LO;
                first = 1;
            }
            else {
                cout << ' ' << N->LO;
            }

        }
        if (N->left) { Q.push(N->left); }
        if (N->right) { Q.push(N->right); }
    }
}

int
main()
{
    Root root;
    root = BuiltTree();
    BL(root);
    return 0;
}

这个是和输入有关的代码

for (int i = 0; i < n; i++) {
        N[i] = new TreeNode;
        int l,r;
        N[i]->LO = i;
        cin >> l >> r;
        N[i]->l = l;
        N[i]->r = r;
        if (l != '-') { rt[l] = 1; }
        if (r != '-') { rt[r] = 1; }
    }