leetcode: 树 94. Binary Tree Inorder Traversal

topic

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?

Thinking

          The title says, the recursive method is too complicated, iterative method of hope. Then use the stack

          It can be seen traversal order is: Left - Root - Right. Therefore Stack, pressed into the root, the traversed left, then the stack is read out from the root, traversing immediately right.

# 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]:
        # left root right
        if root == None:
            return []
        
        ans = []
        stack_root = []
        while (1):
            # 遍历左侧
            while(1):
                while root.left :
                    stack_root.append(root)
                    root = root.left
                ans.append(root.val)
                if root.right:
                    root = root.right
                else:
                    break
            
            # 遍历根和右侧
            if len(stack_root)>0:
                while root.right == None and len(stack_root)>0:
                    root = stack_root.pop()
                    ans.append(root.val)
                if root.right:
                    root = root.right
                else:
                    break
            else:
                break
        return ans

 

Published 45 original articles · won praise 1 · views 3358

Guess you like

Origin blog.csdn.net/qq_22498427/article/details/104585865