94. Binary Tree Inorder Traversal
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]
Example 2:
Input: root = []
Output:[]
Example 3:
Input: root = [1]
Output:[1]
Constraints:
- The number of nodes in the tree is in the range [0, 100].
- -100 <= Node.val <= 100
From: LeetCode
Link: 94. Binary Tree Inorder Traversal
Solution:
Ideas:
This code defines a binary tree node structure, a helper function to compute the size of the binary tree (which is used to allocate the correct amount of memory for the result array), and a recursive function inorder that performs the inorder traversal and fills the result array. Finally, the inorderTraversal function sets up the necessary variables and calls the helper functions to complete the traversal.
Code:
c
/**
* Helper function to compute the size of the binary tree.
*/
int computeSize(struct TreeNode* root) {
if (root == NULL) return 0;
return computeSize(root->left) + computeSize(root->right) + 1;
}
/**
* Recursive function to perform inorder traversal.
*/
void inorder(struct TreeNode* root, int* res, int* index) {
if (root == NULL) return;
inorder(root->left, res, index); // Visit left subtree
res[(*index)++] = root->val; // Visit node
inorder(root->right, res, index); // Visit right subtree
}
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* inorderTraversal(struct TreeNode* root, int* returnSize) {
*returnSize = computeSize(root);
int* res = (int*)malloc(*returnSize * sizeof(int));
int index = 0;
inorder(root, res, &index);
return res;
}