标签:rate btree 高度 span 构造 bsp mat 观察 null
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]
标签:rate btree 高度 span 构造 bsp mat 观察 null
原文地址:http://www.cnblogs.com/hellowooorld/p/7294234.html