1. 程式人生 > >[Data Structure & Algorithm] 二叉樹的遍歷 - 前序遍歷、中序遍歷、後序遍歷以及轉換

[Data Structure & Algorithm] 二叉樹的遍歷 - 前序遍歷、中序遍歷、後序遍歷以及轉換

二叉樹的遍歷

例如,將中綴表示式(a+b)/c-d+e*f表示為二叉樹

  • 前序遍歷 - 字首表示式(波蘭式)
    • 根節點->左子樹->右子樹
    • 示例二叉樹的前序遍歷 +-/+abcd*ef
    • 特點:第一位一定是根節點
  • 中序遍歷 - 中綴表示式
    • 左子樹->根節點->右子樹
    • 找到根節點後,在其左側的都是左子樹下的結點,在其右側的都是右子樹下的結點
  • 後序遍歷 - 字尾表示式(逆波蘭式)
    • 左子樹->右子樹->根節點
    • 示例二叉樹的後序遍歷:ab+c/d-ef*+
    • 特點:最後一位一定是根節點
  • 已知兩種遍歷,求第三種遍歷
    • 如果要確定二叉樹,已知必須包括中序遍歷
    • 已知前序遍歷和後續遍歷 - 只能確定祖先關係
      1. 前序的第一位和後續的最後一位肯定是根節點
      2. 前序的第二位如果和後續的最後第二位一樣,那這個結點就是根節點下的左子樹;反之,則為右子樹
        · 如果前序的第二位是左子樹,則說明該樹的根節點下沒有右子樹
    • 已知前序遍歷和中序遍歷
      • 前序遍歷相當於入棧順序,中序遍歷相當於出棧順序
      • 如果二叉樹沒有左子樹,則其前序遍歷和中序遍歷的順序相同