0
empty tree ::=()
tree ::= empty tree | (w tree tree)
ex:
()
empty tree
(99(5()())(35(-5()())()))
99
/\
5 35
/
-5
class Node
{
public:
int weight; // weight can be negative!
Node *left, *right;
Node():weight(0),left(NULL),right(NULL){}
Node(int d):weight(d),left(NULL),right(NULL){}
};
은 내가, 내 프로그램이 호감 구조와 문제를 얻고 나는 그것이 일어난 이유에 대해 아무 생각이 주어진 조건에 의해 이진 트리를 구축에서 이진 트리를 구축 내 코드와 나는 디버그를위한 정보를 출력하고 테스트 케이스로 99 (5()()) (35 (-5()())))를 출력하면 99 (5 , 내가 어쩌면 문제가 어디에서 내가 NULL을 노드를 반환하는 것 같아요)하지만 문제가 찾을 수 없습니다.이 트리는 각 트리에 노드의 무리를 처리 할 것으로 예상되며 각 테스트 케이스에 최대 10 개 나무가 포함되어 있습니다.이 프로그램을 사용하여 시간이 얼마 남지 않았습니까? 아니면 무엇을해야합니까?
Node* MyBinaryTreeOps::constructTree(Node *root, std::string treeStr)const
{
int idex = 1;//always look at the treeStr[1]
Node *cur=NULL;//use to pass in recursive call
if(treeStr[idex]!='('&&treeStr[idex]!=')'){//meet number create new node
stringstream ss;
while(treeStr[idex]!='('){
ss<<treeStr[idex];
if(treeStr.size()>1){//if size > 1 then remove the treeStr[1],to let treeStr[1] become next char in treeStr
treeStr.erase(1,1);
}
}
int num=0;
ss>>num;
std::cout<<num<<std::endl;//print out just for debug
std::cout<<treeStr[idex]<<std::endl;//print out just for debug
root = new Node(num);
}
if(treeStr[idex]==')'){//meet ')' return subtree constructed
if(treeStr.size()>1){
treeStr.erase(1,1);
}
return root;
}
if(treeStr[idex]=='('){//meet first '(' then construct left subtree
if(treeStr.size()>1){
treeStr.erase(1,1);
}
root->left = constructTree(cur,treeStr);
}
if(treeStr[idex]=='('){ //meet second '(' then construct right subtree
if(treeStr.size()>1){
treeStr.erase(1,1);
}
root->right = constructTree(cur,treeStr);
}
if(treeStr[idex]==')'){ //meet ')' return subtree constructed
if(treeStr.size()>1){
treeStr.erase(1,1);
}
return root;
}
}