655. Print Binary Tree
Input:
1
/
2
Output:
[["", "1", ""],
["2", "", ""]]Input:
1
/ \
2 3
\
4
Output:
[["", "", "", "1", "", "", ""],
["", "2", "", "", "", "3", ""],
["", "", "4", "", "", "", ""]]Last updated
Input:
1
/
2
Output:
[["", "1", ""],
["2", "", ""]]Input:
1
/ \
2 3
\
4
Output:
[["", "", "", "1", "", "", ""],
["", "2", "", "", "", "3", ""],
["", "", "4", "", "", "", ""]]Last updated
Input:
1
/ \
2 5
/
3
/
4
Output:
[["", "", "", "", "", "", "", "1", "", "", "", "", "", "", ""]
["", "", "", "2", "", "", "", "", "", "", "", "5", "", "", ""]
["", "3", "", "", "", "", "", "", "", "", "", "", "", "", ""]
["4", "", "", "", "", "", "", "", "", "", "", "", "", "", ""]]// Recursion
int getHeight(TreeNode* node) {
if (!node) return 0;
return 1 + max(getHeight(node->left), getHeight(node->right));
}
void helper(TreeNode* node, int i, int j, int cur, int height, vector<vector<string> >& res) {
if (!node || cur == height) return;
res[cur][(i + j) / 2] = to_string(node->val);
helper(node->left, i, (i + j) / 2, cur + 1, height, res);
helper(node->right, (i + j) / 2 + 1, j, cur + 1, height, res);
}
vector<vector<string>> printTree(TreeNode* root) {
int m = getHeight(root), n = pow(2, m) - 1;
vector<vector<string> > res(m, vector<string>(n, ""));
helper(root, 0, n - 1, 0, m, res);
return res;
}// Iterative Level Order Traversal
int getHeight(TreeNode* node) {
if (!node) return 0;
return 1 + max(getHeight(node->left), getHeight(node->right));
}
vector<vector<string>> printTree(TreeNode* root) {
int m = getHeight(root), n = pow(2, m) - 1, cur = -1;
vector<vector<string> > res(m, vector<string>(n, ""));
queue<TreeNode*> q({root});
queue<pair<int, int> > idxQ({{0, n - 1}});
while (!q.empty()) {
++cur;
for (int i = q.size() - 1; i >= 0; --i) {
TreeNode* t = q.front(); q.pop();
pair<int, int> idx = idxQ.front(); idxQ.pop();
if (!t) continue;
int left = idx.first, right = idx.second;
int mid = left + (right - left) / 2;
res[cur][mid] = to_string(t->val);
q.push(t->left);
q.push(t->right);
idxQ.push({left, mid});
idxQ.push({mid + 1, right});
}
}
return res;
}