由于准备面试的时候看了很多的面经中都写到问道二叉树的遍历是不允许使用递归实现的.之前一直在实习,好久没有更新blog.现在开始重新编写,记录我的找工作和实习之旅.
二叉树的前序遍历
# 二叉树的前序遍历
class Solution:
def preorderTraversal(self, root):
if not root:
return []
stack, res = [root], []
while stack:
top = stack.pop()
if top:
stack.append(top.right)
stack.append(top.left)
res.append(top.val)
return res
二叉树的中序遍历
# 二叉树的中序遍历
class Solution1:
def inorderTraversal(self, root):
if not root:
return []
stack, result = [], []
while stack or root:
if root is not None:
stack.append(root)
root = root.left
else:
root = stack.pop()
result.append(root.val)
root = root.right
return result
二叉树的后序遍历:
之前两个遍历仔细看看代码还是比较好理解的,对于后序遍历在leetcode上也是一道hard难度的题目因此,我着重讲解一下,就我自己总结的经验.二叉树后续遍历总结为"左右中",先左子树再右子树,最终遍历根节点.其实将这个过程进行一个镜像反转,实际就很类似前序遍历了,最后的顺序为"中右左",因此可以直接根据前序遍历的代码进行修改.
# 二叉树的后序遍历
class Solution2:
def postorderTraversal(self, root):
if not root:
return []
stack, result = [root], []
while stack:
top = stack.pop()
if top:
stack.append(top.left)
stack.append(top.right)
result.append(top.val)
return result[::-1]