응애맘마조
전위, 중위, 후위 노드 추가 탐색 및 삭제 본문
전위, 중위, 후위의 노드에 데이터를 추가하고 삭제 및 탐색하는 코드가 과제였습니다.
#include <iostream>
#include <vector>
#include <list>
using namespace std;
//노드
struct ListNode
{
int data;
ListNode* L = nullptr;
ListNode* R = nullptr;
ListNode(int data):data(data){}
void Print()
{
cout << data << "->";
if (L)L->Print();
if (R)R->Print();
}
void Print1()
{
if (L)L->Print1();
cout << data << "->";
if (R)R->Print1();
}
void Print2()
{
if (L)L->Print2();
if (R)R->Print2();
cout << data << "->";
}
void Add(int data)
{
if (data > this->data)
{
if (R)
R->Add(data);
else
R = new ListNode(data);
}
else if (data < this->data)
{
if (L)
L->Add(data);
else
L = new ListNode(data);
}
}
ListNode* GetMinNode()
{
if (L) return L->GetMinNode();
return this;
}
ListNode* GetMaxNode()
{
if (R) return R->GetMaxNode();
return this;
}
void Delete(int data, ListNode*& pthis)
{
if (this->data < data)
{
if (!R)return;
R->Delete(data, R);
}
else if (this->data > data)
{
if (!L)return;
L->Delete(data, L);
}
//나를 지워야 함
else
{
if (not L and not R)
{
pthis = nullptr;
delete this;
return;
}
else if (L and not R)
{
pthis = L;
delete this;
return;
}
else if (not L and R)
{
pthis = R;
delete this;
return;
}
else
{
ListNode* max = L->GetMaxNode();
this->data = max->data;
L->Delete(this->data, L);
}
}
}
int findLevel(int data, int level)
{
if (this->data > data)
{
if (L) return L->findLevel(data, level + 1);
}
else if (this->data < data)
{
if (R) return R->findLevel(data, level + 1);
}
return level;
}
};
//기능을 제공하는 클래스
class BST
{
private:
ListNode* root =nullptr;
public:
void find(int data)
{
if (root)
{
cout << "레벨:" << root->findLevel(data,1) << endl;
cout << "깊이:" << root->findLevel(data, 1) - 1 << endl;
}
}
void push(int data)
{
if (root)
{
root->Add(data);
}
else
{
root = new ListNode(data);
}
}
void erase(int data)
{
if (root)
{
root->Delete(data, root);
}
}
void Print1()
{
cout << "전위:";
if (root)
{
root->Print();
}
cout << endl;
}
void Print2()
{
cout << "중위:";
if (root)
{
root->Print1();
}
cout << endl;
}
void Print3()
{
cout << "후위:";
if (root)
{
root->Print2();
}
cout << endl;
}
};
int main()
{
BST list;
while (1)
{
list.Print1();
list.Print2();
list.Print3();
cout << "1. 데이터 추가 2. 데이터 삭제 3. 데이터 탐색" << endl;
int input;
cin >> input;
if (input == 1)
{
cout << "추가할 데이터:";
int input2;
cin >> input2;
list.push(input2);
}
if (input == 2)
{
cout << "삭제할 데이터:";
int input2;
cin >> input2;
list.erase(input2);
}
if (input == 3)
{
cout << "탐색할 데이터:";
int input2;
cin >> input2;
list.find(input2);
}
}
int a;
cin >> a;
}
코드입니다.
읽어주셔서 감사합니다.
'공부 > 3D과제' 카테고리의 다른 글
동적할당 및 해제/댕글링 포인터/가비지 컬렉션/스마트 포인터/메모리 단편화/메모리 풀 (1) | 2023.05.04 |
---|---|
ImGui에서 노드 추가 및 삭제와 탐색 (0) | 2023.05.04 |
이진탐색트리, DFS, BFS, (전위, 중위, 후위) 순회 (0) | 2023.04.27 |
진짜 사람 찾기 (0) | 2023.04.27 |
하노이의 탑 (0) | 2023.04.26 |