아무리 코드를 짜도 안되네요ㅠㅠ
부탁드립니다..ㅠㅠ
#include<iostream>
#include<fstream>
#include<iterator>
#include<vector>
using namespace std;
#define LEFT 1
#define RIGHT 2
template<class T>
class Queue{
private:
vector<T> v;
public:
vector<T>&getVec(){return v;};
void enqueue(const T & val){v.push_back(val);};
T dequeue(){
T temp=v.front();
v.erase(v.begin());
return temp;
};
T peek()const{return v.front();};
};
typedef struct treeNode{
char data;
int count;
struct treeNode* left;
struct treeNode* right;
}treeNode;
treeNode* createNode(const char ch)
{
treeNode *newNode = new treeNode;
newNode->data=ch;
newNode->count=0;
newNode->left=NULL;
newNode->right=NULL;
return newNode;
}
void level_order(treeNode *ptr)
{
Queue<treeNode*> q;
if(!ptr) return;
q.enqueue(ptr);
while(!q.getVec().empty()){
ptr = q.dequeue();
cout<<ptr->data<<"\t";
if(ptr->left)
q.enqueue(ptr->left);
if(ptr->right)
q.enqueue(ptr->right);
}
}
void makeTree(Queue<char>& chQ, vector<treeNode*>& v)
{
treeNode *c, *p;
char ch;
while(chQ.getVec().size()!=1){
ch=chQ.dequeue();
switch(ch)
{
case '(':
v.push_back(createNode(chQ.dequeue()));
break;
case ',':
if(chQ.peek()!='(') chQ.dequeue();
(*v.rbegin())->count++;
break;
case ')':
c=*v.rbegin();
v.pop_back();
p=*v.rbegin();
if(p->count==LEFT){
p->left=c;
}else if(p->count==RIGHT){
p->right=c;
}else{
cout<<"오류"<<endl;
}
break;
default:
break;
}
}
}
int main()
{
Queue<char> chQ;
vector<treeNode*> v;
ifstream ifd("inputTree.txt");
copy(istream_iterator<char>(ifd), istream_iterator<char>(), back_inserter(chQ.getVec()));
makeTree(chQ, v);
level_order(*v.begin());
return 0;
}
부탁드립니다..ㅠㅠ
#include<iostream>
#include<fstream>
#include<iterator>
#include<vector>
using namespace std;
#define LEFT 1
#define RIGHT 2
template<class T>
class Queue{
private:
vector<T> v;
public:
vector<T>&getVec(){return v;};
void enqueue(const T & val){v.push_back(val);};
T dequeue(){
T temp=v.front();
v.erase(v.begin());
return temp;
};
T peek()const{return v.front();};
};
typedef struct treeNode{
char data;
int count;
struct treeNode* left;
struct treeNode* right;
}treeNode;
treeNode* createNode(const char ch)
{
treeNode *newNode = new treeNode;
newNode->data=ch;
newNode->count=0;
newNode->left=NULL;
newNode->right=NULL;
return newNode;
}
void level_order(treeNode *ptr)
{
Queue<treeNode*> q;
if(!ptr) return;
q.enqueue(ptr);
while(!q.getVec().empty()){
ptr = q.dequeue();
cout<<ptr->data<<"\t";
if(ptr->left)
q.enqueue(ptr->left);
if(ptr->right)
q.enqueue(ptr->right);
}
}
void makeTree(Queue<char>& chQ, vector<treeNode*>& v)
{
treeNode *c, *p;
char ch;
while(chQ.getVec().size()!=1){
ch=chQ.dequeue();
switch(ch)
{
case '(':
v.push_back(createNode(chQ.dequeue()));
break;
case ',':
if(chQ.peek()!='(') chQ.dequeue();
(*v.rbegin())->count++;
break;
case ')':
c=*v.rbegin();
v.pop_back();
p=*v.rbegin();
if(p->count==LEFT){
p->left=c;
}else if(p->count==RIGHT){
p->right=c;
}else{
cout<<"오류"<<endl;
}
break;
default:
break;
}
}
}
int main()
{
Queue<char> chQ;
vector<treeNode*> v;
ifstream ifd("inputTree.txt");
copy(istream_iterator<char>(ifd), istream_iterator<char>(), back_inserter(chQ.getVec()));
makeTree(chQ, v);
level_order(*v.begin());
return 0;
}
