1. 程式人生 > >002 前、中、後序遍歷二叉樹(遞迴&非遞迴演算法)

002 前、中、後序遍歷二叉樹(遞迴&非遞迴演算法)

class TreeNode:
    self.val = x
    self.left = None
    self.right = None

遞迴演算法:

  • 前序遍歷二叉樹
class Solution:
    def preOrderTraverse(self, pRoot):
        if not pRoot:
            return
        print(pRoot.val)
        self.preOrderTraverse(root.left)
        self.preOrderTraverse(root.right)
  • 中序遍歷二叉樹
class Solution:
    def inOrderTraverse(self, pRoot):
        if not pRoot:
            return
        self.preOrderTraverse(root.left)
        print(pRoot.val)
        self.preOrderTraverse(root.right)
  • 後序遍歷二叉樹
class Solution:
    def postOrderTraverse(self, pRoot):
        if not pRoot:
            return
        self.preOrderTraverse(root.left)
        self.preOrderTraverse(root.right)
         print(pRoot.val)

非遞迴演算法:

  • 前序遍歷二叉樹
class Solution:
    def preOrderTraverse(self, pRoot):
        if not pRoot:
            return
        node = pRoot
        stack = []
        while node or stack:
            while node:
                print(node.val)
                stack.append(node)
                node = node.left
            node = stack.pop()
            node = node.right
  • 中序遍歷二叉樹
class Solution:
    def preOrderTraverse(self, pRoot):
        if not pRoot:
            return
        node = pRoot
        stack = []
        while node or stack:
            while node:
                stack.append(node)
                node = node.left
            node = stack.pop()
            print(node.val)
            node = node.right
  • 後序遍歷二叉樹
class Solution:
    def preOrderTraverse(self, pRoot):
        if not pRoot:
            return
        node = pRoot
        stack = []
        res = []
        while node or stack:
            while node:
                res.append(node.val)
                stack.append(node)
                node = node.right
            node = stack.pop()
            node = node.left
        return res[::-1]