k*4
4 楼
节点按照他们离最远的在其子树中的叶子节点的距离分配到不同的vector里面,
void push_nodes(unordered_map> &nodes, TreeNode *root
, int len)
{
if (nodes.find(len) == nodes.end())
{
vector temp(1, root);
nodes[len] = temp;
}
else
nodes[len].push_back(root);
return;
}
int printAndDeleteLeavesHelper(TreeNode *root, unordered_map TreeNode*>> &nodes)
{
if (root == NULL)
return 0;
if (root->left == NULL && root->right == NULL)
{
push_nodes(nodes, root, 1);
return 1;
}
int from_left = printAndDeleteLeavesHelper(root->left, nodes);
int from_right = printAndDeleteLeavesHelper(root->right, nodes);
int max_len_from_leaves = max(from_left, from_right);
push_nodes(nodes, root, max_len_from_leaves);
return max_len_from_leaves;
}
void printTree(TreeNode *root)
{
if (root == NULL)
return;
unordered_map(int, vector printAndDeleteLeavesHelper(nodes, root);
int i=1;
while (nodes.find(i) != nodes.end())
{
for(int j=0; j print nodes[i][j];
}
return;
}
void push_nodes(unordered_map
, int len)
{
if (nodes.find(len) == nodes.end())
{
vector
nodes[len] = temp;
}
else
nodes[len].push_back(root);
return;
}
int printAndDeleteLeavesHelper(TreeNode *root, unordered_map
{
if (root == NULL)
return 0;
if (root->left == NULL && root->right == NULL)
{
push_nodes(nodes, root, 1);
return 1;
}
int from_left = printAndDeleteLeavesHelper(root->left, nodes);
int from_right = printAndDeleteLeavesHelper(root->right, nodes);
int max_len_from_leaves = max(from_left, from_right);
push_nodes(nodes, root, max_len_from_leaves);
return max_len_from_leaves;
}
void printTree(TreeNode *root)
{
if (root == NULL)
return;
unordered_map(int, vector
int i=1;
while (nodes.find(i) != nodes.end())
{
for(int j=0; j
}
return;
}
k*4
5 楼
时间和空间复杂度都是
O(树的大小)。
O(树的大小)。
h*k
12 楼
我觉得如果每次只删除叶节点的话就dfs,因为不一定每次删的leaf在同一个高度:
while(root has children) {
helper(root, root.left);
helper(root, root.right);
}
helper(Node parent, Node child) {
if (child has no children){
parent.left/right = null; // check if its left or right of parent.
} else {
helper(child, child.right);
helper(child, child.left);
}
}
当然复杂度有点高。。
while(root has children) {
helper(root, root.left);
helper(root, root.right);
}
helper(Node parent, Node child) {
if (child has no children){
parent.left/right = null; // check if its left or right of parent.
} else {
helper(child, child.right);
helper(child, child.left);
}
}
当然复杂度有点高。。
相关阅读
careerbuilder resume upgrade, is it worth it?background check一般都是哪些方面的?攒人品,经济危机下如何寻找出路一般onsite 多久需要问问?太可怜了....我已经被同一个理由拒了3次了学校的H1B转公司的H1B请教一下Knapsack O(n) space我应不应该现在申请H1B?贡献几道CS电面题有人最近申OPT延期吗?help on Excel question 批处理文件请教讲个笑话background check这里的人都是搞it的?请教申请H1B如果失败或者没名额了是否影响OPT申请拿了H1B,被公司派回中国工作,还能回美国吗?电面忘了问考官email怎么办不知道哪里可以查到公司是否是Everified资料?