美文网首页算法学习
算法题--二叉树中序遍历

算法题--二叉树中序遍历

作者: 岁月如歌2020 | 来源:发表于2020-04-26 19:02 被阅读0次
image.png

0. 链接

题目链接

1. 题目

Given a binary tree, return the inorder traversal of its nodes' values.

Example:

Input: [1,null,2,3]
   1
    \
     2
    /
   3

Output: [1,3,2]

Follow up: Recursive solution is trivial, could you do it iteratively?

2. 思路1:递归

  • 先左子节点, 后根节点, 再右子节点

3. 代码

# coding:utf8
from typing import  List


# 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]:

        def inorder_traversal(node, results):
            if node is None:
                return

            inorder_traversal(node.left, results)
            results.append(node.val)
            inorder_traversal(node.right, results)

        results = list()
        inorder_traversal(root, results)

        return results


solution = Solution()

root = node = TreeNode(1)
node.right = TreeNode(2)
node = node.right
node.left = TreeNode(3)

print(solution.inorderTraversal(root))


输出结果

[1, 3, 2]

4. 结果

image.png

5. 思路2: 利用栈结构

  • 先一路取左节点, 直到不能取为止, 依次压入栈中
  • 然后栈顶元素(即最左子节点)出栈, 并加入结果列表中, 然后尝试切换到这个节点的右子树
  • 对于每个子树节点, 仍然像对待一棵树一样的处理, 再次循环处理
  • 这样就从左下角逐渐处理到根节点, 然后又依次处理右子树

6. 代码

# coding:utf8
from typing import  List


# 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]:
        results = list()
        stack = list()
        cur = root
        while cur is not None or len(stack) > 0:
            while cur is not None:
                stack.append(cur)
                cur = cur.left
            cur = stack.pop()
            results.append(cur.val)
            cur = cur.right
        return results


solution = Solution()

root = node = TreeNode(1)
node.right = TreeNode(2)
node = node.right
node.left = TreeNode(3)

print(solution.inorderTraversal(root))

输出结果

[1, 3, 2]

结果

image.png

相关文章

  • 二叉树的中序遍历(Java)——Morris迭代算法

    二叉树的中序遍历 对于此题而言,若采用递归算法(简单),我们使用深度优先算法来遍历二叉树。若采用迭代算法,我们使用...

  • 面试题

    面试题 二叉树 非递归实现二叉树遍历 节点: 前序遍历 中序遍历 后序遍历 排序 快速排序 其他问题 算法题 给一...

  • leecode刷题(29)-- 二叉树的中序遍历

    leecode刷题(29)-- 二叉树的中序遍历 二叉树的中序遍历 给定一个二叉树,返回它的中序 遍历。 示例: ...

  • ALI 算法

    二叉树遍历算法: 按层遍历, 中序前序后序:

  • 剑指offer中关于二叉树题目的总结

    关于二叉树的问题,也就是涉及二叉树的四种遍历算法以及基本的删除、插入等操作 中序遍历和前序遍历/后序遍历的结合 题...

  • 二叉树的遍历

    二叉树的遍历 二叉树常用的遍历方式有:前序遍历、中序遍历、后序遍历、层序遍历四种遍历方式,不同的遍历算法,其思想略...

  • 二叉树遍历-JAVA实现

    基础二叉树 二叉树遍历分为前序、中序、后序递归和非递归遍历、还有层序遍历。 前序递归遍历算法:访问根结点-->递归...

  • LeetCode-94. 二叉树的中序遍历

    94. 二叉树的中序遍历 给定一个二叉树,返回它的中序 遍历。 示例: 进阶: 递归算法很简单,你可以通过迭代算法...

  • 二叉树遍历算法

    二叉树遍历算法有4种,先序、中序、后序和层序遍历 先序遍历:先根、后左、再右中序遍历:先左、后根、再右后序遍历:先...

  • 二叉树遍历算法

    摘要:二叉树主要有3种遍历算法,分为为先序、中序、后序。本文对二叉树的3种遍历算法的遍历规则进行介绍,并给出3种遍...

网友评论

    本文标题:算法题--二叉树中序遍历

    本文链接:https://www.haomeiwen.com/subject/clijwhtx.html