题目分析:
给定一个二叉树,返回它的中序 遍历。示例:
输入: [1,null,2,3]
输出: [1,3,2]
解题思路:
遍历二叉树我们可以选择使用递归或者栈的方式解决
- 递归,我们只需要判断当前节点不为None,就接着把左节点进入递归,左节点进入完毕,我们就输出,当前节点值,然后把右节点进入递归。(这与中序遍历思想相同)参考博客1
- 栈,我们把左节点压入栈,左节点压入完毕,我们把最后一个节点出栈,然后寻找它的右节点,开始循环。有右节点就开始寻找左节点,没有右节点就出栈。参考博客2
提交代码1:(递归,Runtime: 36 ms, faster than 82.33% )
class Solution:
def inorderTraversal(self, root: TreeNode) -> list:
res = []
def pre_order(tree):
if tree==None:
return
pre_order(tree.left)
res.append(tree.val)
pre_order(tree.right)
pre_order(root)
return res
提交代码2:(栈,Runtime: 36 ms, faster than 82.33% )
class Solution:
def inorderTraversal(self, root: TreeNode) -> list:
res = []
stack = []
while root or stack:
if root:
stack.append(root)
root = root.left
else:
root = stack.pop()
res.append(root.val)
root = root.right
return res
附:(测试代码)
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def inorderTraversal(self, root: TreeNode) -> list:
res = []
stack = []
while root or stack:
if root:
stack.append(root)
root = root.left
else:
root = stack.pop()
res.append(root.val)
root = root.right
return res
t1_1 = TreeNode(1)
t1_2 = TreeNode(2)
t1_3 = TreeNode(3)
t1_4 = TreeNode(4)
t1_5 = TreeNode(5)
t1_6 = TreeNode(6)
t1_7 = TreeNode(7)
t1_1.left = t1_2
t1_1.right = t1_3
t1_2.left = t1_4
t1_2.right = t1_5
t1_3.left = t1_6
t1_3.right = t1_7
t2_1 = TreeNode(1)
t2_2 = TreeNode(None)
t2_3 = TreeNode(2)
t2_4 = TreeNode(3)
t2_1.left = t2_2
t2_1.right = t2_3
t2_2.left = t2_4
print(Solution().inorderTraversal(t1_1))
print(Solution().inorderTraversal(t2_1))