1. Recursive DFS with Diagonal Map
Intuition
Traverse tree with DFS. Maintain integer d. For left child, d + 1. For right child, d. Group nodes into map[d] and concatenate.
When to apply: Basic baseline check.
Algorithm
- Step 1: Helper dfs(node, d, map).
- Step 2: If node == null return.
- Step 3: map[d].push_back(node.val).
- Step 4: dfs(node.left, d + 1, map).
- Step 5: dfs(node.right, d, map). Concatenate map entries.
#include <iostream>#include <vector>#include <string>#include <algorithm>using namespace std; class Solution {public: void dfs(TreeNode* node, int d, map<int, vector<int>>& m) { if (!node) return; m[d].push_back(node->val); dfs(node->left, d + 1, m); dfs(node->right, d, m); } vector<int> diagonal(TreeNode* root) { map<int, vector<int>> m; dfs(root, 0, m); vector<int> res; for (auto& p : m) { for (int v : p.second) res.push_back(v); } return res; }}; int main() { // Sample driver execution cout << "Execution completed successfully." << endl; return 0;} Time & Space Complexity
- Time complexity:
O(n log n)— Traversing n nodes plus ordered map insertion/lookup. - Space complexity:
O(n)— Map stores all n nodes plus recursion stack.