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]

猜你喜欢

转载自blog.csdn.net/weixin_39010770/article/details/83902609