思路先找深度,在递归赋值。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int get_tree_level(TreeNode *root, int level)
{
if (root == NULL)
return level;
return max(get_tree_level(root->left, level + 1), get_tree_level(root->right, level + 1));
}
void solve(TreeNode *root, vector<vector<string>> &ans, int x, int y, int m)
{
if (root == NULL)
return ;
ans[x][y] = to_string(root->val);
m = m - (m >> 1);
cout << m << endl;
solve(root->left, ans, x + 1, y - m, m);
solve(root->right, ans, x + 1, y + m, m);
}
vector<vector<string>> printTree(TreeNode* root) {
vector<vector<string>> ans;
int level = get_tree_level(root, 0);
// cout << level << endl;
const int m = (1 << level) - 1;
for (int i = 0; i < level; i++)
ans.push_back(vector<string>(m, ""));
solve(root, ans, 0, (1 << (level - 1)) - 1, (1 << (level - 1)) - 1);
return ans;
}
};
/*
1 1 0
2 3 1
3 7 3
4 15 7
*/