0402 이진 탐색 트리 재귀 함수로 중위순회
2021. 4. 2. 14:52ㆍC#/자료구조
public class BSTNode
{
public int data;
public BSTNode left;
public BSTNode right;
//생성자
public BSTNode(int data)
{
this.data = data;
}
}
public class BST
{
private BSTNode root;
public List<BSTNode> ToSortedList()
{
//동적 배열 생성
List<BSTNode> list = new List<BSTNode>();
this.Traversal(this.root, list);
return list;
}
public void Add(int data)
{
if (this.root == null)
{
this.root = new BSTNode(data);
}
else
{
//변수에 루트 담기
var node = this.root;
//변수의 값이 null아닐때까지 반복
while (node != null)
{
//비교
var result = data.CompareTo(node.data);
if (result == 0)
{
//같으면 값이 이미 있음
throw new ApplicationException("duplicated!");
}
else if (result < 0)
{
//넣을려고 하는 값이 노드의 값보다 작으면 (왼쪽)
if (node.left == null)
{
//왼쪽에 값이 없으면 새노드 붙이기
node.left = new BSTNode(data);
//종료
break;
}
else
{
//왼쪽에 값이 있으면 변수에 왼쪽 노드 설정
node = node.left;
}
}
else
{
//넣으려고 하는 값이 노드의 값보다 크면 (오른쪽)
if (node.right == null)
{
//오른쪽에 없으면 새노드 붙이기
node.right = new BSTNode(data);
//종료
break;
}
else
{
//오른쪽에 있으면 변수에 오른쪽 노드 설정
node = node.right;
}
}
}
}
}
private void Traversal(BSTNode node, List<BSTNode> list)
{
if (node == null) return;
this.Traversal(node.left, list);
list.Add(node); //중위순회
this.Traversal(node.right, list);
}
public void Print(List<BSTNode> list)
{
foreach (var node in list)
{
Console.Write("{0} ", node.data);
}
Console.WriteLine();
}
}
public class App
{
public App()
{
Console.WriteLine("App");
BST bst = new BST();
bst.Add(30);
bst.Add(25);
bst.Add(35);
bst.Add(21);
bst.Add(27);
bst.Add(32);
var list = bst.ToSortedList();
bst.Print(list);
}
}
'C# > 자료구조' 카테고리의 다른 글
0405 그래프의 탐색 ★★★★ (0) | 2021.04.05 |
---|---|
0402 그래프 (0) | 2021.04.02 |
0401 이진탐색트리Binary Search Tree (0) | 2021.04.01 |
0401 연결리스트를 사용해 이진트리 만들고 Postorder Traversal (Iterative) 복습 (0) | 2021.04.01 |
0401 연결리스트로 이진트리 만들고 중위순회 하기 (Iterative방식) 복습 (0) | 2021.04.01 |