Print a binary tree in an m*n 2D string array following these rules:
m
should be equal to the height of the given binary tree.n
should always be an odd number.""
.Example 1:
Input: 1 / 2 Output: [["", "1", ""], ["2", "", ""]]
Example 2:
Input: 1 / 2 3 4 Output: [["", "", "", "1", "", "", ""], ["", "2", "", "", "", "3", ""], ["", "", "4", "", "", "", ""]]
Example 3:
Input: 1 / 2 5 / 3 / 4 Output: [["", "", "", "", "", "", "", "1", "", "", "", "", "", "", ""] ["", "", "", "2", "", "", "", "", "", "", "", "5", "", "", ""] ["", "3", "", "", "", "", "", "", "", "", "", "", "", "", ""] ["4", "", "", "", "", "", "", "", "", "", "", "", "", "", ""]]
Note: The height of binary tree is in the range of [1, 10].
思路:
观察例子可以发现,行m就是树的高度h,列n就是2h-1,那么首先构造一个二维数组ret[m][n].用“”初始化。
观察得到,每一个深度为d的树节点t都在ret所在的行为d(假设下标从1开始)的中间。而t的左孩子,则深度为t+1,所在的行下标范围[left,mid-1]
可以递归。
int maxDepth(TreeNode *root) { int depth; if(root==NULL)return 0; else{ depth=(maxDepth(root->left)>maxDepth(root->right)? maxDepth(root->left):maxDepth(root->right))+1; return depth; } } void printTree(vector<vector<string>>& ret,TreeNode* root,int leftIndex,int rightIndex,int curDepth,int maxDepth) { if(curDepth>maxDepth || root==NULL||leftIndex>rightIndex) return; int mid = (leftIndex+rightIndex)/2; ret[curDepth-1][mid] = to_string(root->val); printTree(ret,root->left,leftIndex,mid-1,curDepth+1,maxDepth); printTree(ret,root->right,mid+1,rightIndex,curDepth+1,maxDepth); } vector<vector<string>> printTree(TreeNode* root) { int depth = maxDepth(root); if(depth == 0) return {{}}; vector<vector<string>> ret(depth,vector<string>(pow(2,depth)-1,"")); printTree(ret,root,0,pow(2,depth)-1-1,1,depth); return ret; }
[leetcode-655-Print Binary Tree]
原文:http://www.cnblogs.com/hellowooorld/p/7294234.html