算法的重要性,我就很少说了吧,想去大厂,就必需要通过基础知识和业务逻辑面试+算法面试。因此,为了提升你们的算法能力,这个公众号后续天天带你们作一道算法题,题目就从LeetCode上面选 !html
今天和你们聊的问题叫作 二叉树的中序遍历,咱们先来看题面:node
https://leetcode-cn.com/problems/binary-tree-inorder-traversal/面试
Given the root of a binary tree, return the inorder traversal of its nodes' values.
算法
题意

解题
# 先序
def dfs(u):
visited.append(u)
dfs(u.left)
dfs(u.right)
# 中序
def dfs(u):
dfs(u.left)
visited.append(u)
dfs(u.right)
# 后序
def dfs(u):
dfs(u.left)
dfs(u.right)
visited.append(u)数组

class Solution:
def inorderTraversal(self, root: TreeNode) -> List[int]:
ret = []
stack = []
stack.append(root)
while len(stack) > 0:
# 获取栈顶顶点
cur = stack[-1]
if cur is None:
stack.pop()
continue
# 若是左孩子存在,那么优先遍历左孩子
if cur.left is not None:
stack.append(cur.left)
# 把左指针置为空,防止死循环
# 这里也能够用set来维护
cur.left = None
continue
# 左边遍历结束以后加入序列
ret.append(cur.val)
stack.pop()
if cur.right is not None:
stack.append(cur.right)
return ret微信
上期推文:数据结构
本文分享自微信公众号 - 程序IT圈(DeveloperIT)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。app