void dfs(TreeNode* root, int r, int c, int height, vector<vector<string>> &res) { // if (!root || r < 0 || c < 0 || r >= m || c >= n) return ; if (!root) return ; res[r][c] = to_string(root->val); dfs(root->left, r + 1, c - getNumPow(height - r - 1), height, res); dfs(root->right, r + 1, c + getNumPow(height - r - 1), height, res); }
// @lc code=start /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { private int height; public List<List<String>> printTree(TreeNode root) { List<List<String>> res = new ArrayList<List<String>>(); dfsGetHeight(root, -1); int m = height + 1, n = getNumPow(height + 1) - 1; for (int i = 0; i < m; ++i) { List<String> tmp = new ArrayList<String>(); for (int j = 0; j < n; ++j) { tmp.add(""); } res.add(tmp); } dfs(root, 0, (n - 1) / 2, res); return res; }
public void dfsGetHeight(TreeNode root, int height) { if (root == null) return ; height += 1; this.height = height > this.height ? height : this.height; dfsGetHeight(root.left, height); dfsGetHeight(root.right, height); }
public void dfs(TreeNode root, int r, int c, List<List<String>> list) { if (root == null) return ; list.get(r).set(c, Integer.toString(root.val)); dfs(root.left, r + 1, c - getNumPow(this.height - r - 1), list); dfs(root.right, r + 1, c + getNumPow(this.height - r - 1), list); }
public int getNumPow(int num) { if (num < 0) return 0; if (num == 0) return 1; int res = 2; for (int i = num; i > 1; --i) { res *= 2; } return res; } } // @lc code=end
# @lc code=start # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right