簡體   English   中英

二叉樹雙階遍歷

[英]Binary Tree Double Order Traversal

任何人都可以向我解釋雙順序遍歷嗎?

        A
      /   \
     B     E
   /  \   /  \
  C   D  F    G

雙順序遍歷輸出:ABCCBDDAEFFEGG

我對解釋而不是代碼感興趣。

謝謝

假設您對雙順序遍歷的解釋感興趣:

對於每次遍歷,你

  • 訪問節點
  • 穿越左邊的孩子
  • 訪問節點
  • 橫穿右兒童

這里的所有都是它的。 如果您沒有左子(例如C),則兩個“訪問節點”操作會重復發生,這就是您在輸出中看到兩個C的原因。

只是為了可視化(輸出為粗體):

  • 訪問A: A
  • 橫過左邊的孩子B.
    • 訪問B: AB
    • 遍歷左邊的孩子C.
      • 訪問C: ABC
      • 沒有留下的孩子
      • 訪問C: ABCC
      • 沒有合適的孩子
    • 穿越右邊的孩子D.
      • 訪問D: ABCCD
      • 沒有留下的孩子
      • 訪問D: ABCCDD
      • 沒有合適的孩子
  • 訪問A: ABCCDDA
  • 穿越右邊的孩子E.
    • 訪問E: ABCCDDAE

等等

主要是遍歷樹的遞歸方法(這里我們處理的是二叉樹)

這是一個雙階遍歷的算法:

算法DoubleOrder(root)

  1. if(root不為NULL)

    1. 打印(根)
    2. DoubleOrder (leftSubtree)//遞歸調用
    3. 打印(根)
    4. DoubleOrder (rightSubtree)//遞歸調用
  2. 萬一

  3. 結束DoubleOrder

說明:

  1. 訪問A並打印輸出:A
  2. A已離開子樹
    1. 訪問B並打印輸出:AB
    2. B已經離開了子樹
      1. 訪問C並打印輸出:ABC
      2. C沒有左子樹
      3. 再次訪問C並打印輸出:ABCC
      4. C沒有子樹
      5. 返回B(在C的情況下,所有4個語句都已執行)
    3. 再次訪問B並打印輸出:ABCCB
    4. B有正確的子樹
      1. 訪問D並打印輸出:ABCCBD
      2. D沒有左子樹
      3. 再次訪問D並打印輸出:ABCCBDD
      4. D沒有子樹
      5. 返回B(在D的情況下,所有4個語句都已執行)
    5. 返回A(B的情況下執行了所有4個語句)
  3. 再次訪問A並打印輸出:ABCCBDDA
  4. A有正確的子樹
    1. 訪問E並打印輸出:ABCCBDDAE
    2. E已經離開了子樹
      1. 訪問F並打印輸出:ABCCBDDAEF
      2. F沒有左子樹
      3. 再次訪問F並打印輸出:ABCCBDDAEFF
      4. F沒有子樹
      5. 返回E(F中所有4個語句都已執行)
    3. 再次訪問E並打印輸出:ABCCBDDAEFFE
    4. E有正確的子樹
      1. 訪問G並打印輸出:ABCCBDDAEFFEG
      2. G沒有左子樹
      3. 再次訪問G並打印輸出:ABCCBDDAEFFEGG
      4. G沒有子樹
      5. 返回E(G的所有4個語句都已執行)
    5. 返回A(E的所有4個語句都已執行)
  5. 當我們返回到樹的主根時停止執行(因為在A的情況下所有4個語句都已執行)

最終輸出:ABCCBDDAEFFEGG

我希望它可以幫助你理解整體概念! 我很高興第一次回答堆棧溢出:)

想象一下,你正在走路,從根開始。

  1. 你在A;
  2. 走到左邊的孩子,你到了B;
  3. 走到左邊的孩子,C;
  4. 死路一條,你回頭,還是C;
  5. 回到B;
  6. 走到右邊的孩子,到D;
  7. 死路一條,轉身還是D;

等等

這只是一種遍歷內外的遍歷。

在一個前序遍歷的左右兒童訪問之間,你訪問根(因為你必須回到它進一步走),你可以認為葉子沒有孩子的根,而null會讓你回去在任何時候(因此連續兩次訪問葉子,節點只有正確的孩子)。

遞歸:

1. Visit root of (sub)tree.
2. Visit left subtree.
3. Revisit root of (sub)tree.
4. Visit right subtree.

我無法想到它的應用程序,雖然我已經做了一些真正奇特的事情,一堆樹上的節點(和鏈表)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM