二叉樹排序(前序、中序、后序)

理論

前序、中序、后序主要根據(jù)遍歷時(shí)根結(jié)點(diǎn)的順序來(lái)決定。

  • 前序遍歷(根結(jié)點(diǎn)在前面)
    先遍歷根結(jié)點(diǎn),然后遍歷左子樹,最后遍歷右子樹
  • 中序遍歷(根結(jié)點(diǎn)在中間)
    先遍歷左子樹,再遍歷根結(jié)點(diǎn),最后遍歷右子樹
  • 后序遍歷(根結(jié)點(diǎn)在后面)
    先遍歷左子樹,再遍歷右子樹,最后遍歷根結(jié)點(diǎn)

理解

有一個(gè)二叉樹如下圖:


二叉樹
  • 前序遍歷結(jié)果:ABCDEFGHIJ
  • 中序遍歷結(jié)果:CBEDFAHGIJ
  • 后序遍歷結(jié)果:CEFDBHJIGA

實(shí)戰(zhàn)

  • 前序遞歸遍歷
from typing import List


class TreeNode:
    def __init__(self, val='', left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
class Solution:
    def preorderTraversal(self, root: TreeNode) -> List[int]:
        def preorder(root: TreeNode):
            if not root:
                return []
            res.append(root.val)
            preorder(root.left)
            preorder(root.right)

        res = []
        preorder(root)
        return res


e = TreeNode('e')
f = TreeNode('f')
d = TreeNode('d', e, f)
c = TreeNode('c')
b = TreeNode('b', c, d)
h = TreeNode('h')
j = TreeNode('j')
i = TreeNode('i', right=j)
g = TreeNode('g', h, i)
a = TreeNode('a', b, g)

solu = Solution()
res = solu.preorderTraversal(a)
print(res)

打印結(jié)果:

['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
  • 中序遞歸遍歷
from typing import List

class TreeNode:
    def __init__(self, val='', left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
class Solution:
    def preorderTraversal(self, root: TreeNode) -> List[int]:
        def preorder(root: TreeNode):
            if not root:
                return []

            preorder(root.left)
            res.append(root.val)
            preorder(root.right)

        res = []
        preorder(root)
        return res

e = TreeNode('e')
f = TreeNode('f')
d = TreeNode('d', e, f)
c = TreeNode('c')
b = TreeNode('b', c, d)
h = TreeNode('h')
j = TreeNode('j')
i = TreeNode('i', right=j)
g = TreeNode('g', h, i)
a = TreeNode('a', b, g)

solu = Solution()
res = solu.preorderTraversal(a)
print(res)

打印結(jié)果:

['c', 'b', 'e', 'd', 'f', 'a', 'h', 'g', 'i', 'j']
  • 后序遞歸遍歷
from typing import List

class TreeNode:
    def __init__(self, val='', left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
class Solution:
    def preorderTraversal(self, root: TreeNode) -> List[int]:
        def preorder(root: TreeNode):
            if not root:
                return []

            preorder(root.left)
            preorder(root.right)
            res.append(root.val)

        res = []
        preorder(root)
        return res

e = TreeNode('e')
f = TreeNode('f')
d = TreeNode('d', e, f)
c = TreeNode('c')
b = TreeNode('b', c, d)
h = TreeNode('h')
j = TreeNode('j')
i = TreeNode('i', right=j)
g = TreeNode('g', h, i)
a = TreeNode('a', b, g)

solu = Solution()
res = solu.preorderTraversal(a)
print(res)

打印結(jié)果:

['c', 'e', 'f', 'd', 'b', 'h', 'j', 'i', 'g', 'a']
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容