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