二叉树的前序,中序,后序,层序遍历(python非递归写法总结, python 面试必备)
为了方便大家理解和记忆,都是采用最容易理解以及代码量最少的写法,尽量pythonic.
二叉树的前序遍历(leetcode 144)
二叉树的前序遍历指的是(中—> 左 —> 右)。实现非递归算法的主要思路就是队列和栈。但是由于栈后进先出的特性,所以先压入栈的时候,先压入右孩子, 再压入左孩子。
Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def preorderTraversal(self, root):
ret, stack = [], [root]
while stack:
node = stack.pop()
if node:
ret.append(node.val)
#注意压入栈的顺序,先压入右孩子,再压入左孩子
stack.append(node.right)
stack.append(node.left)
return ret
二叉树中序遍历(leetcode 94)
中序遍历的意思就是(左—> 中 —> 右)的顺序遍历
Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def inorderTraversal(self, root):
ret, stack = [], []
while stack or root:
if root:
stack.append(root)
root = root.<