트리 순회

전산학에서 트리 순회(Tree traversal)는 트리 구조에서 각각의 노드를 정확히 한 번만, 체계적인 방법으로 방문하는 과정을 말한다. 이는 노드를 방문하는 순서에 따라 분류된다. 여기서 설명하는 알고리즘이진 트리에 대해서 작성되었지만, 다른 모든 트리에서도 일반화될 수 있다.

순회

연결 리스트와 1차원 배열과 같은 선형 자료 구조에서는 한 가지의 논리적인 순회 방법만이 존재하지만, 트리 구조의 순회에는 많은 방법이 존재한다. 이진 트리의 루트 노드에서 시작해서, 세 가지 주요 단계를 거치며 순회를 진행하는데, 그 단계에는 현재 노드를 방문하는 것, 왼쪽 자식 노드를 순회하는 것과 오른쪽 자식 노드를 순회하는 것이 있다. 이러한 과정은 재귀로 쉽게 설명할 수 있다.

전위 순회

전위 순회(preorder)는 다음과 같은 방법으로 진행한다.

  1. 노드를 방문한다.
  2. 왼쪽 서브 트리를 전위 순회한다.
  3. 오른쪽 서브 트리를 전위 순회한다.

전위 순회는 깊이 우선 순회(depth-first traversal)라고도 한다.

중위 순회

중위 순회(Inorder)은 다음의 순서로 진행된다.

  1. 왼쪽 서브 트리를 중위 순회한다.
  2. 노드를 방문한다.
  3. 오른쪽 서브 트리를 중위 순회한다.

중위 순회는 대칭 순회(symmetric)라고도 한다.

후위 순회

후위 순회(postorder)는 다음과 같은 방법으로 진행한다.

  1. 왼쪽 서브 트리를 후위 순회한다.
  2. 오른쪽 서브 트리를 후위 순회한다.
  3. 노드를 방문한다.

레벨 순서 순회

레벨 순서 순회(level-order)는 모든 노드를 낮은 레벨부터 차례대로 순회한다. 레벨 순서 순회는 너비 우선 순회(breadth-first traversal)라고도 한다.

정렬된 이진 트리

이진 탐색 트리에서

  • 전위 순회: F, B, A, D, C, E, G, I, H (root, left, right)
  • 중위 순회: A, B, C, D, E, F, G, H, I (left, root, right)
  • 후위 순회: A, C, E, D, B, H, I, G, F (left, right, root)
  • 레벨 순서 순회: F, B, G, A, D, I, C, E, H

구현

preorder(node)
  print node.value
  if node.left ≠ null then preorder(node.left)
  if node.right ≠ null then preorder(node.right)
inorder(node)
  if node.left  ≠ null then inorder(node.left)
  print node.value
  if node.right ≠ null then inorder(node.right)
postorder(node)
  if node.left  ≠ null then postorder(node.left)
  if node.right ≠ null then postorder(node.right)
  print node.value

모든 구현은 트리의 높이에 비례한 호출 스택 공간이 필요하다. 약하게 균형 잡힌 트리에서 이는 더욱 중요하다.

각각의 노드가 부모 포인터를 가지고 있거나 스레드 이진 트리인 경우 스택을 쓸 필요가 없다. 스레드를 쓰는 경우, 중위 순회를 더 크게 개량할 수 있고, 전위 순회와 후위 순회에 필요한 부모 노드의 필요성을 되찾더라도 이것이 알고리즘에 기반한 간단한 스택보다 더 느려지게 된다.

스레드 트리를 중위 순회할 경우, 이런 식으로 할 수 있다.

inorder(node)
  while hasleftchild(node) do
    node = node.left
  do
    visit(node)
    if (hasrightchild(node)) then
      node = node.right
      while hasleftchild(node) do
        node = node.left
    else
      while node.parent ≠ null and node = node.parent.right
        node = node.parent
      node = node.parent
  while node ≠ null

스레드 이진 트리는 포인터가 자식 노드인지를 판단하는 부분이 추가된다.

큐 기반 레벨 순서 순회

레벨 순서 순회는 간단한 로 구현할 수 있다. 아래는 그 의사코드이다. 이 구현에는 마지막 노드의 깊이에 비례한 공간이 필요하다. 이는 모든 노드 번호의 합계 / 2가 된다. 공간을 더욱 효율적으로 사용하고 싶으면 반복 심화 깊이 우선 탐색(iterative deepening depth-first search)을 사용한다.

levelorder(root)
  q = empty queue
  q.enqueue(root)
  while not q.empty do
    node := q.dequeue()
    visit(node)
    if node.left ≠ null
      q.enqueue(node.left)
    if node.right ≠ null
      q.enqueue(node.right)

사용

중위 순회

중위 순회는 특히 이진 탐색 트리에서 사용되는데, 이진 탐색 트리의 설정에 따른 기본적인 순서에서 값을 반환해야 하기 때문이다. 왜냐하면, 이진 탐색 트리의 노드 n에서, n의 모든 왼쪽 서브 트리는 n보다 작고, n의 모든 오른쪽 서브 트리는 n보다 크거나 같다. 따라서, 만약 왼쪽 서브 트리를 순서대로 방문하게 된다면, 재귀 호출을 사용하고, n을 방문하고, 오른쪽 서브 트리를 순서대로 방문하여, n을 루트로 하는 모든 서브트리를 순서대로 방문하게 된다. 재귀 호출이 정확히 서브 트리를 순서대로 방문하는지 구조적 귀납법의 수학적 원리를 사용하여 추측할 수 있다. 역순 중위 순회는 값을 내림차순으로 정렬하는 것과 비슷하다.

전위 순회

전위 순회는 이진 탐색 트리를 완전히 복사해서 만들 때 새로운 트리에 값을 집어넣는 동안에 흔히 사용한다. 또한 전위 표기법을 구하는데 사용할 수 있다. 식의 값을 계산할 때, 오른쪽에서 왼쪽으로 살펴보면서 원소를 스택에 넣는다. 연산자를 찾을 때마다, 스택 위에 있는 2개의 기호를 빼내고 그 연산자를 이용해 계산한 뒤 그 결과를 다시 스택에 넣는다. 예를 들면, 전위 표기법 식 * + 2 3 4 (중위 표기법으로는 (2 + 3) * 4)를 계산하는 방법은 다음과 같다.

전위 순회를 이용한 식 계산
남아있는 식 스택
∗ + 2 3 4 <비었음>
∗ + 2 3 4
∗ + 2 3 4
∗ + 2 3 4
5 4
20

반복 순회

모든 재귀 알고리즘은 트리의 깊이에 비례한 스택 공간이 필요하다. 재귀적 순회는 여러 가지 잘 알려진 방법을 이용하여 반복적인 방법으로 변환할 수 있다. 아래의 예제는 재귀적인 방법을 사용하지 않는 후위 순회를 보여준다.

nonRecursivePostorder(rootNode)
  nodeStack.push(rootNode)
  while (! nodeStack.empty())
    currNode = nodeStack.peek()
    if ((currNode.left != null) and (currNode.left.visited == false))
      nodeStack.push(currNode.left)
    else
      if ((currNode.right != null) and (currNode.right.visited == false))
        nodeStack.push(currNode.right)
      else
        print currNode.value
        currNode.visited := true
        nodeStack.pop()

이 경우, 각각의 노드는 보통의 정보가 아닌 추가적인 visited 플래그가 필요하다. 다음 예제는 visited 플래그를 사용하지 않는 전위 순회 함수를 자바로 구현한 것이다.

public void traverseTree(Node root) {
   Stack nodes = new Stack();
   nodes.push(root);
   Node currentNode;
   while (! nodes.isEmpty()){
      currentNode = nodes.pop();
      Node right = currentNode.right();
      if (right != null)
         nodes.push(right);
      Node left = currentNode.left();
      if (left != null)
         nodes.push(left);
      System.out.println("Node data: "+currentNode.data);
   }
}

만약 각각의 노드가 부모 노드의 정보를 가지고 있다면, 반복 순회는 스택이나 visited 플래그를 쓰지 않고도 구현할 수 있다.

같이 보기

참고 문헌

Read other articles:

HaggisHaggis yang dijual di pasarBahan utamaJeroan domba (hati, jantung, dan paru-paru) dan lambung sebagai pembungkusnya; bawang merah, oat, suet, rempah-rempahSunting kotak info • L • BBantuan penggunaan templat ini Buku resep: Haggis  Media: Haggis Haggis adalah adonan yang terbuat dari jeroan domba yang dicincang bersama dengan bawang merah, oat, suet, rempah-rempah, dan garam, yang dicampur dengan sedikit kaldu, dibungkus dengan lambung domba, lalu direbus dengan t...

 

Ikon Rusia tentang Pesta Pemuliaan Salib (ikon dari Yaroslavl; karya Gury Nikitin, 1980, Tretyakov Gallery di Moskow). Dalam kalender liturgi Kekristenan, ada beberapa Pesta Pemuliaan Salib Suci yang berbeda, yang mana semuanya memperingati Salib yang digunakan untuk menyalibkan Yesus. Jumat Agung ditujukan untuk mengenang Sengsara dan Penyaliban Kristus, sedangkan Pesta Salib Suci dikhususkan untuk merayakan kayu salib itu sendiri sebagai instrumen keselamatan. 14 September Pesta atau hari r...

 

Frederick Hamilton-Temple-Blackwood, 1:e markis av Dufferin och Ava Född21 juni 1826[1][2][3]FlorensDöd12 februari 1902[1][2][3] (75 år)Clandeboye House, StorbritannienBegravdBangorMedborgare iFörenade kungariket Storbritannien och IrlandUtbildad vidChrist Church CollegeEton College SysselsättningPolitiker[4], diplomat, författare[5]BefattningLedamot av Brittiska överhusetLedamot av Irlands kronrådLedamot av KronrådetKansler för hertigdömet Lancaster (1868–1872)Kan...

Batalyon Artileri Pertahanan Udara 15/Dahana Bhaladika YudhaLambang Yonarhanud 15/Dahana Bhaladika YudhaDibentuk1 April 1966NegaraIndonesiaCabangArhanudTipe unitSatuan Bantuan TempurPeranPasukan Artileri UdaraBagian dariKodam IV/DiponegoroMarkasSemarang, Jawa TengahJulukanYonarhanud 15/DBYMotoDahana Bhaladika YudhaBaretCoklatMaskotBurung GelatikUlang tahun1 AprilAlutsistameriam S-60 kal 57mm, Dshk 12,7mm dan Rudal RBS-70. Markas Yon Arhanudse 15/Dahana Bhaladika Yudha Batalyon Artileri Pertah...

 

Questa voce o sezione sull'argomento meteorologia non cita le fonti necessarie o quelle presenti sono insufficienti. Commento: Due sole note, i collegamenti esterni sono tutti di servizi/stazioni e inutilizzabili come fonti Puoi migliorare questa voce aggiungendo citazioni da fonti attendibili secondo le linee guida sull'uso delle fonti. Segui i suggerimenti del progetto di riferimento. Cumulonembo calvus, nube convettiva in atmosfera La meteorologia[1] (dal greco μετεωρο...

 

У этого термина существуют и другие значения, см. Съёмка. Съёмка эпизода художественного фильма на натуре Съёмка — процесс создания кинематографического изображения на киноплёнке или цифровом носителе. Киносъёмка является важнейшим этапом кинопроизводства, которы�...

1989 single by Lil LouisFrench KissSingle by Lil Louisfrom the album From the Mind of Lil Louis ReleasedJuly 17, 1989Recorded1989Genre House acid house[1] techno[2][3][4] Length9:52Label FFRR/PolyGram Epic/CBS Songwriter(s) Marvin Burns Karlana Johnson Producer(s)Lil LouisLil Louis singles chronology French Kiss (1989) New York (1989) Alternative coverUS release, B-side French Kiss is a song by American DJ and record producer Lil Louis that became a European a...

 

1939 film by Walter Lang, William A. Seiter The Little PrincessTheatrical release posterDirected byWalter LangScreenplay byEthel HillWalter FerrisBased onA Little Princess1905 novelby Frances Hodgson BurnettProduced byDarryl F. ZanuckGene MarkeyStarringShirley TempleRichard GreeneAnita LouiseIan HunterArthur TreacherCesar RomeroCinematographyArthur C. MillerWilliam SkallEdited byLouis LoefflerMusic byCharles MaxwellCyril J. MockridgeHerbert W. SpencerSamuel PokrassDistributed byTwentieth Cent...

 

Disambiguazione – Ostfriesland rimanda qui. Se stai cercando l'omonima nave da guerra, vedi SMS Ostfriesland. Bandiera della Frisia Orientale Mattina in Frisia Mappa della Frisia orientale La Frisia Orientale (in tedesco: Ostfriesland) è una regione costiera del nord ovest dello Stato federato tedesco di Bassa Sassonia. Confina con la Frisia Occidentale (nei Paesi Bassi) e il circondario della Frisia Settentrionale nello stato tedesco dello Schleswig-Holstein; insieme, formano la ...

Dudu Nazionalità  Brasile Altezza 166[1] cm Peso 80[1] kg Calcio Ruolo Attaccante Squadra  Palmeiras Carriera Giovanili 2005-2010 Cruzeiro Squadre di club1 2009-2010 Cruzeiro6 (0)[2]2010→  Coritiba21 (0)2010-2011 Cruzeiro6 (0)[3]2011-2014 Dinamo Kiev30 (3)2014-2015→  Grêmio35 (3)[4]2015-2020 Palmeiras154 (41)[5]2020-2021→  Al-Duhail22 (14)2021- Palmeiras46 (8) Nazionale 2009-2010 Br...

 

Disambiguazione – Se stai cercando altri significati, vedi Rio de Janeiro (disambigua). Rio de JaneirocomuneMunicípio do Rio de Janeiro Rio de Janeiro – Veduta LocalizzazioneStato Brasile Stato federato Rio de Janeiro MesoregioneRio de Janeiro MicroregioneRio de Janeiro AmministrazioneSindacoEduardo Paes (PSD) dal 1º gennaio 2021 Data di istituzione1º marzo 1565 TerritorioCoordinate22°54′25″S 43°11′17″W / 22.906944°S 43.188056°W-22.9069...

 

Vincent Kompany Kompany bermain untuk Belgia pada Piala Dunia FIFA 2018Informasi pribadiNama lengkap Vincent Jean Mpoy Kompany[1]Tanggal lahir 10 April 1986 (umur 38)Tempat lahir Uccle, Brussels, BelgiaTinggi 193 cm (6 ft 4 in)[2]Posisi bermain Bek tengahInformasi klubKlub saat ini Burnley (manajer)Karier junior2000–2003 AnderlechtKarier senior*Tahun Tim Tampil (Gol)2003–2006 Anderlecht 73 (6)2006–2008 Hamburger SV 29 (1)2008–2019 Manchester City 2...

Hairstyling product This article does not cite any sources. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Hair wax – news · newspapers · books · scholar · JSTOR (November 2023) (Learn how and when to remove this message) A small tin of hair wax Hair wax is a thick hairstyling product containing wax, used to assist with holding the hair. In contrast with hair gel,...

 

この項目には、一部のコンピュータや閲覧ソフトで表示できない文字が含まれています(詳細)。 数字の大字(だいじ)は、漢数字の一種。通常用いる単純な字形の漢数字(小字)の代わりに同じ音の別の漢字を用いるものである。 概要 壱万円日本銀行券(「壱」が大字) 弐千円日本銀行券(「弐」が大字) 漢数字には「一」「二」「三」と続く小字と、「壱」「�...

 

Campionato olandese di pallanuoto(femminile)Sport Pallanuoto TipoClub Paese Paesi Bassi TitoloCampione dei Paesi Bassi Partecipanti12 (Hkl) StoriaFondazione1901 Detentore Nereus Zaandam Modifica dati su Wikidata · Manuale Il campionato olandese femminile di pallanuoto è l'insieme dei tornei pallanuotistici femminili nazionali per club organizzati dalla Koninklijke Nederlandse Zwembond, la federnuoto dei Paesi Bassi. Quello olandese è il campionato femminile più longevo d'Eu...

2020年夏季奥林匹克运动会波兰代表團波兰国旗IOC編碼POLNOC波蘭奧林匹克委員會網站olimpijski.pl(英文)(波兰文)2020年夏季奥林匹克运动会(東京)2021年7月23日至8月8日(受2019冠状病毒病疫情影响推迟,但仍保留原定名称)運動員206參賽項目24个大项旗手开幕式:帕维尔·科热尼奥夫斯基(游泳)和马娅·沃什乔夫斯卡(自行车)[1]闭幕式:卡罗利娜·纳亚(皮划艇)&#...

 

2020年夏季奥林匹克运动会马来西亚代表團马来西亚国旗IOC編碼MASNOC马来西亚奥林匹克理事会網站olympic.org.my(英文)2020年夏季奥林匹克运动会(東京)2021年7月23日至8月8日(受2019冠状病毒病疫情影响推迟,但仍保留原定名称)運動員30參賽項目10个大项旗手开幕式:李梓嘉和吳柳螢(羽毛球)[1][2]閉幕式:潘德莉拉(跳水)[3]獎牌榜排名第74 金牌 銀牌 銅�...

 

American college basketball season This article does not cite any sources. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: 2014–15 Cornell Big Red men's basketball team – news · newspapers · books · scholar · JSTOR (April 2019) (Learn how and when to remove this message) 2014–15 Cornell Big Red men's basketballConferenceIvy LeagueRecord13–17 (5–9 Ivy)Head&#...

بطولة العالم لكرة اليد للرجال 2017تفاصيل المسابقةالبلد المضيف فرنساالتواريخ11–29 يناير 2017الفرق24الأماكن8 (في 8 مدن مضيفة)المراكز النهائيةالبطل فرنساالوصيف النرويجالمركز الثالث سلوفينياالمركز الرابع كرواتياإحصائيات المسابقةالمباريات الملعوبة84الأهداف �...

 

  المسح الجيولوجي الأمريكي (بالإنجليزية: United States Geological Survey)‏  يو اس جي اس—USGS (بالإنجليزية) هيئة المسح الجيولوجي الأمريكية هيئة المسح الجيولوجي الأمريكية   تفاصيل الوكالة الحكومية البلد الولايات المتحدة[1]  الاسم الكامل الماسح الجيولوجي الأمريكي تأسست 3 مارس ...