每日一题20201209(94. 二叉树的中序遍历)

简介: 二叉树的中序遍历

94. 二叉树的中序遍历

0.jpg

image-20201209183728489

递归



递归的实现很简单,和前序遍历类似,只是改变了append到数组的顺序。


# 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]:
        ans = []
        def traversal(root):
            if root is None:
                return
            traversal(root.left)
            ans.append(root.val)
            traversal(root.right)
        traversal(root)    
        return ans

1.jpg

image-20201209184546101

迭代



递归维护了一个隐藏的stack,这里我们需要手动维护这个stack.
以[1, null, 2, 3]为例,进栈出栈顺序为:
[1]      // 1进栈
[]        // 由于1没有left,1出栈
[2]      // 2进栈
[2, 3]    // 2的left进栈
[2]      // 由于3没有left 3出栈
[]        // 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]:
        stack = []
        ans = []
        while len(stack) > 0 or root is not None:
            # 如果root左节点一直有值,则一直进栈
            while root is not None:
                stack.append(root)
                root = root.left
            current = stack.pop()
            ans.append(current.val)
            # 当前节点出栈后,把右节点赋给root,因为中序遍历是 左孩子 根节点 右孩子
            root = current.right
        return ans

0.1.jpg

image-20201209184757061





相关文章
|
6月前
|
算法 Java C++
leetcode-145:二叉树的后序遍历
leetcode-145:二叉树的后序遍历
50 0
|
6月前
|
算法 API DataX
二叉树(下)+Leetcode每日一题——“数据结构与算法”“对称二叉树”“另一棵树的子树”“二叉树的前中后序遍历”
二叉树(下)+Leetcode每日一题——“数据结构与算法”“对称二叉树”“另一棵树的子树”“二叉树的前中后序遍历”
LeetCode | 二叉树的前中后序遍历
LeetCode | 二叉树的前中后序遍历
【力扣每日一题】144. 二叉树的前序遍历
【力扣每日一题】144. 二叉树的前序遍历
【面试小知识】带你深入了解二叉树的前中序遍历
【面试小知识】带你深入了解二叉树的前中序遍历
|
11月前
|
存储 算法
每日一题:LeetCode-102.二叉树的层序遍历
每日一题:LeetCode-102.二叉树的层序遍历
|
11月前
|
算法 索引
每日一题:LeetCode-105.从前序遍历与中序遍历构造二叉树
每日一题:LeetCode-105.从前序遍历与中序遍历构造二叉树
|
算法 Java
代码随想录训练营day14|144. 二叉树的前序遍历 145. 二叉树的后序遍历 94. 二叉树的中序遍历...
代码随想录训练营day14|144. 二叉树的前序遍历 145. 二叉树的后序遍历 94. 二叉树的中序遍历...
剑指offer_二叉树---二叉搜索树的后序遍历
剑指offer_二叉树---二叉搜索树的后序遍历
68 0