본문 바로가기

자료구조

TREE (연결리스트)

반응형
#include<iostream>
using namespace std;
//노드생성
class Node //원하는 데이터 선언, 노드생성할때마다 포인터들 초기화
{
public:
	char data;
	Node *parent;
	Node *brother;
	Node *child;
	Node() {}
	Node(char data) :data(data), parent(0), brother(0), child(0) {}
	~Node()
	{
		parent = NULL;
		brother = NULL;
		child = NULL;
	}
};
//탐색함수
Node* searchNode(Node *R, char pid) // 루트부터 탐색, 트리의 크기가 클경우에 매번 루트부터 탐색하면 호출횟수가 많아진다는 단점이있다.
{



}
// 추가함수 
void InsertNode(Node *R, char data)
{
	Node *newNode = new Node(data);
	newNode->parent = R; //부모 연결

	Node *cur = R->child;

	if (cur == 0)R->child = newNode;
	while (cur != 0) { //이미 자식이 있다면 형제노드로 연결해준다.
		if (cur->brother == 0)
		{
			cur->brother = newNode;
			break;
		}
		cur = cur->brother;
	}
}
//수정함수1
void upDataNode1(Node *R, char searchNode, char data) // 원하는 노드를 찾을때까지 재귀로 찾는기본함수
{

	if (R == 0)return;

	if (R->data == searchNode)
	{
		R->data = data;
		return;
	}

	if (R->brother != 0)upDataNode1(R->brother, searchNode, data);
	if (R->child != 0)upDataNode1(R->child, searchNode, data);
	return;
}
//수정함수 2

void upDataNode2(Node *R, char searchNode, char data) // while문을 통해서 탐색하는 방법
{
	if (R == 0)return;
	if (R->data == searchNode)
	{
		R->data = data;
		return;
	}
	
	Node *cur = R->brother;
	while (cur != 0)
	{
		if (cur->data == searchNode)
		{
			cur->data = data;
			break;
		}
		cur = cur->brother;
	}
	if (R->child != 0)upDataNode2(R->child, searchNode, data);
	return; 

}

//삭제함수
void deleteNode(Node *R, char searchNode)
{
	if (R == 0)return;
	if (R->data == searchNode) //부모형제관계를 확인
	{
		Node *parent = R->parent;//부모확인
		if (parent->child == R) //내가 첫째였는가
		{
			Node *temp = R;
			parent->child = R->brother;
			delete temp;
		}
		else
		{
			Node *cur = parent->child;
			Node *pre = 0;
			while (cur != 0)
			{
				if (cur->data == searchNode)
				{
					Node *temp = cur;
					pre->brother = cur->brother;
					delete temp;
					break;
				}
				pre = cur;
				cur = cur->brother;
			}

		}
	}

	if (R->brother != 0) deleteNode(R->brother, searchNode);
	if (R->child != 0) deleteNode(R->child, searchNode);
	return;
}
//트리삭제

void deleteTree(Node *R) //형제 자식순으로 탐색을 가고  그 뒤에 자기자신 지워준다.
{
	if (R == 0)return;

	deleteTree(R->brother);
	deleteTree(R->child);
	delete R;
	R = 0;
}
int main()
{

}

https://meylady.tistory.com/17

반응형

'자료구조' 카테고리의 다른 글

연결리스트(양방향,head 및 tail에 데이터추가)  (0) 2019.10.17
트라이(Trie) 자료구조  (0) 2019.04.29
HASH(해쉬)  (0) 2019.04.26
연결리스트[큐]  (0) 2019.04.26
정렬 총 정리  (0) 2019.04.24