算法学习

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

2020-04-26  本文已影响0人  岁月如歌2020
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
上一篇 下一篇

猜你喜欢

热点阅读