3. In-Order

Left ⟶ ROOT ⟶ Right
// Recursive
private void TraverseTree (Node root) {
TraverseTree(Node.left);
System.out.println(root.data);
TraverseTree(Node.right);
}
// Helper Function
void dfs(TreeNode* root, vector<int>& ans) {
if (!root) return;
dfs(root->left, ans);
ans.push_back(root->val);
dfs(root->right, ans);
}
vector<int> inorderTraversal(TreeNode* root) {
vector<int> ans;
dfs(root, ans);
return ans;
}
// Iterative
vector<int> inorderTraversal(TreeNode* root) {
vector<int> ans;
stack<TreeNode*> st;
TreeNode* curr = root;
while (curr != nullptr || !st.empty()) {
while (curr != nullptr) {
st.push(curr);
curr = curr->left;
}
curr = st.top();
st.pop();
ans.push_back(curr->val);
curr = curr->right;
}
return ans;
}
Special Property:
In-order Traversal of BST (Binary Search Tree) gives you a sorted array