今天下午在做这个题目
这里测试案例里面要输入‘-’表示后面没有子节点;
但是我自己测试的时候发现只要我输入了‘-’就无法继续输入
像这样之后无论如何我都无法输入了;
但是我把表示后面没有子节点的条件修改成了-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; }
}