链接
https://leetcode-cn.com/problems/binary-tree-inorder-traversal/
前言
kun没精力整理
题目
给定一个二叉树的根节点 root ,返回它的中序遍历。
- 示例1
输入:root = [1,null,2,3]
输出:[1,3,2]
示例 2:
输入:root = []
输出:[]
示例 3:
输入:root = [1]
输出:[1]
示例 4
输入:root = [1,2]
输出:[2,1]
示例5
输入:root = [1,null,2]
输出:[1,2]
关键
思路1
# 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: TreeNode) -> List[int]:
aStack = []
node = root
output = []
if root == None: # 如果直接是个空的就回个空的给它。爱过!
return output
while node or aStack: # 如果node和aStack都是空的,说明全查完了。
while node: # 如果node是空的,说明左边没子节点了。
aStack.append(node)
node = node.left
node = aStack.pop() # 左边没子节点了就输出栈顶的节点值,然后从它右边的子节点继续。
output.append(node.val)
node = node.right
return output
- 遍历方式怎么记?
b站视频:二叉树的遍历结构
思路2
- 中序遍历:左根右
- 递归方式实现
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def inorderTraversal(self, root: TreeNode) -> List[int]:
res = []
def dfs(root):
if not root:
return
dfs(root.left)
res.append(root.val)
dfs(root.right)
dfs(root)
return res
- return 空=return None
- 同理前序遍历,后续遍历
疑问
参考
[1] Python3 先序,中序,后序 各种方法总结 肥肠清晰【全国最菜栈遍历】
[2] 动画演示+三种实现 94. 二叉树的中序遍历