3. In-Order

INORDER.gif614

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

Powered by Forestry.md