Given the root of a binary tree, return the inorder traversal of its nodes' values.
Example 1:
Input:root = [1,null,2,3]
Output:[1,3,2]
Explanation:
Example 2:
Input:root = [1,2,3,4,5,null,8,null,null,6,7,9]
Output:[4,2,6,5,7,1,3,9,8]
Explanation:
Example 3:
Input:root = []
Output:[]
Example 4:
Input:root = [1]
Output:[1]
Constraints:
The number of nodes in the tree is in the range [0, 100].
-100 <= Node.val <= 100
Follow up: Recursive solution is trivial, could you do it iteratively?
Solutions
Solution 1: Recursive Traversal
We first recursively traverse the left subtree, then visit the root node, and finally recursively traverse the right subtree.
The time complexity is $O(n)$, and the space complexity is $O(n)$. Here, $n$ is the number of nodes in the binary tree, and the space complexity mainly depends on the stack space of the recursive call.
1 2 3 4 5 6 7 8 9101112131415161718
# 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 = rightclassSolution:definorderTraversal(self,root:Optional[TreeNode])->List[int]:defdfs(root):ifrootisNone:returndfs(root.left)ans.append(root.val)dfs(root.right)ans=[]dfs(root)returnans
/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */funcinorderTraversal(root*TreeNode)(ans[]int){vardfsfunc(*TreeNode)dfs=func(root*TreeNode){ifroot==nil{return}dfs(root.Left)ans=append(ans,root.Val)dfs(root.Right)}dfs(root)return}