94. Binary Tree Inorder Traversal 二叉树的中序遍历

首先是递归Recursive的解法

# 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]:
        if root is None:
            return []
        result = []
        if root.left is not None:
            result += self.inorderTraversal(root.left)
        result.append(root.val)
        if root.right is not None:
            result += self.inorderTraversal(root.right)
        return result
        

非递归的解法一,使用栈。根节点先入栈,然后循环将其所有左节点全部入栈。
然后从栈顶弹出一个元素并记录到输出,然后访问这个元素的右节点,循环。

# 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]:
        if root is None:
            return []
        
        result = []
        p = root
        stack = []
        while p or len(stack) > 0:
            while p:
                stack.append(p)
                p = p.left
            p = stack[-1]
            stack.pop()
            result.append(p.val)
            p = p.right
        return result
        

改写一下上面的写法,看起来更加直观:

# 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]:
        if root is None:
            return []
        
        result = []
        p = root
        stack = []
        while p or len(stack) > 0:
            if p:
                stack.append(p)
                p = p.left
            else:
                p = stack[-1]
                stack.pop()
                result.append(p.val)
                p = p.right
        return result
        

还有一种线索二叉树的解法,留待下一轮刷题
https://www.cnblogs.com/grandyang/p/4297300.html

你可能感兴趣的:(94. Binary Tree Inorder Traversal 二叉树的中序遍历)