/// <summary> /// 전위 순회 함수 /// 전위 순회는 뿌리 ->왼쪽 -> 오른쪽 순서로 방문 /// </summary> public void PreorderPrintTree() { JeongBinaryTreeNode <T> current = Root; JeongStack <JeongBinaryTreeNode <T> > BtreeStaks = new JeongStack <JeongBinaryTreeNode <T> >(); JeongLinkedList <T> printList = new JeongLinkedList <T>(); if (Root == null) { Console.Write("리턴 합니다 트리가 비었습니다"); return; } BtreeStaks.PuSH(Root); //BtreeStaks.PuSH(Root); Console.WriteLine(BtreeStaks.IsEmpTy()); int index = 0; while (!BtreeStaks.IsEmpTy()) { var PopData = BtreeStaks.Pop; printList.Add(PopData.Data); // 방문 처리 //스택은 FIFO // 오른쪽 먼저 삽입 -> 왼쪽 삽입 if (PopData.Right != null) { BtreeStaks.Push = PopData.Right; } if (PopData.Left != null) { BtreeStaks.Push = PopData.Left; } } ConsolPrint(ref printList); }
/// <summary> /// 중위 순회 /// </summary> public void InorderPrintTree() { JeongBinaryTreeNode <T> current = null; JeongStack <JeongBinaryTreeNode <T> > BtreeStaks = new JeongStack <JeongBinaryTreeNode <T> >(); JeongLinkedList <T> printList = new JeongLinkedList <T>(); BtreeStaks.PuSH(current); current = Root; //BtreeStaks.PuSH(Root); Console.WriteLine(BtreeStaks.IsEmpTy()); while (!BtreeStaks.IsEmpTy()) { // 매 반복시 왼쪾 트리 검색 만약 왼쪽 트리 원소가 있다면 스택에 저장 while (current != null) { BtreeStaks.Push = current; current = current.Left; } current = BtreeStaks.Pop; if (current == null) { Console.WriteLine("현재 널 발생"); break; } // break; printList.Add(current.Data); current = current.Right; Console.WriteLine("현재 널 발생2"); } ConsolPrint(ref printList); }