Leetcode 94.二叉树的中序遍历
1 题目描述(Leetcode题目链接)
给定一个二叉树,返回它的中序遍历。
输入: [1,null,2,3]
1
\
2
/
3
输出: [1,3,2]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
2 题解
中序遍历就是对每个节点来说,先访问节点的左孩子,再访问本节点,再访问节点的右孩子,知道了中序遍历的过程后题目就不难了。中序遍历的迭代方法需要用到栈的数据结构。初始栈空,开始循环,当前节点及其所有左孩子都入栈,弹出栈顶节点,访问该节点后将其右孩子及其右孩子的所有左孩子入栈,以此类推。
# 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]:
retv = []
stack = []
while root or stack:
while root:
stack.append(root)
root = root.left
root = stack.pop()
retv.append(root.val)
root = root.right
return retv
递归方法:
# 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]:
retv = []
if root:
retv += self.inorderTraversal(root.left)
retv.append(root.val)
retv += self.inorderTraversal(root.right)
return retv