s*t
2 楼
电面一家最近比较火的startup
实现二叉树的postorder traversal,我就写啊,递归,很快搞定,十行左右,然后面
试官说不用写这么多四、五就能搞定,想了想也改好了。
follow up,不用递归,我就改啊,while循环,有个小错误,他提示之后,也写好了。
又follow up,在while循环的基础上,写getfirst函数,找到postorder的第一个node
指针,然后写个getnext函数,根据第一个接着一个一个找下去。我问能不能有额外内
存或者可不可以改变二叉树,比如删节点,回答说不行。然后就悲剧了,实在想不出
getnext怎么写,最后把getfirst写好就到时间了。现在想想,单向的二叉树不可能实
现吧?!嗨,当时应该多问一句是不是双向的。
实现二叉树的postorder traversal,我就写啊,递归,很快搞定,十行左右,然后面
试官说不用写这么多四、五就能搞定,想了想也改好了。
follow up,不用递归,我就改啊,while循环,有个小错误,他提示之后,也写好了。
又follow up,在while循环的基础上,写getfirst函数,找到postorder的第一个node
指针,然后写个getnext函数,根据第一个接着一个一个找下去。我问能不能有额外内
存或者可不可以改变二叉树,比如删节点,回答说不行。然后就悲剧了,实在想不出
getnext怎么写,最后把getfirst写好就到时间了。现在想想,单向的二叉树不可能实
现吧?!嗨,当时应该多问一句是不是双向的。
j*e
3 楼
会被秒据么
s*s
6 楼
做了一下,不知道对不对。
void PostVisit(TreeNode *tree) {
if(!tree)
return;
PostVisit(tree->left);
PostVisit(tree->right);
print(tree->value);
}
void PostVisit(TreeNode *tree) {
if(!tree)
return;
stack stkNodes;
stkNodes.push(tree);
while(!stkNodes.empty()) {
TreeNode *node = stkNodes.top();
if(node->left)
stkNodes.push(node->left);
else if(node->right)
stkNodes.push(node->right);
else {
visit(node);
stkNodes.pop();
while(!stkNodes.empty()) {
TreeNode *parent = stkNodes.top();
if(!parent->right || node==parent->right) {
visit(parent)
node = parent;
stkNodes.pop();
} else {
stkNodes.push(parent->right);
break;
}
}
}
}
}
TreeNode *getFirst(TreeNode *root) {
if(!root)
return NULL;
TreeNode *node = root;
while(node->left)
node = node->left;
return node;
}
TreeNode *getNext(TreeNode *root, TreeNode *pre) {
if(!tree)
return;
bool bReturnNode = false;
stack stkNodes;
stkNodes.push(tree);
while(!stkNodes.empty()) {
TreeNode *node = stkNodes.top();
if(node == pre)
bReturnNode = true;
if(node->left)
stkNodes.push(node->left);
else if(node->right)
stkNodes.push(node->right);
else {
if(bReturnNode && node!=pre)
return node;
visit(node);
stkNodes.pop();
while(!stkNodes.empty()) {
TreeNode *parent = stkNodes.top();
if(!parent->right || node==parent->right) {
if(bReturnNode && parent!=pre)
return parent;
visit(parent)
node = parent;
stkNodes.pop();
} else {
stkNodes.push(parent->right);
break;
}
}
}
}
return NULL;
}
node
【在 s*********t 的大作中提到】
: 电面一家最近比较火的startup
: 实现二叉树的postorder traversal,我就写啊,递归,很快搞定,十行左右,然后面
: 试官说不用写这么多四、五就能搞定,想了想也改好了。
: follow up,不用递归,我就改啊,while循环,有个小错误,他提示之后,也写好了。
: 又follow up,在while循环的基础上,写getfirst函数,找到postorder的第一个node
: 指针,然后写个getnext函数,根据第一个接着一个一个找下去。我问能不能有额外内
: 存或者可不可以改变二叉树,比如删节点,回答说不行。然后就悲剧了,实在想不出
: getnext怎么写,最后把getfirst写好就到时间了。现在想想,单向的二叉树不可能实
: 现吧?!嗨,当时应该多问一句是不是双向的。
void PostVisit(TreeNode *tree) {
if(!tree)
return;
PostVisit(tree->left);
PostVisit(tree->right);
print(tree->value);
}
void PostVisit(TreeNode *tree) {
if(!tree)
return;
stack
stkNodes.push(tree);
while(!stkNodes.empty()) {
TreeNode *node = stkNodes.top();
if(node->left)
stkNodes.push(node->left);
else if(node->right)
stkNodes.push(node->right);
else {
visit(node);
stkNodes.pop();
while(!stkNodes.empty()) {
TreeNode *parent = stkNodes.top();
if(!parent->right || node==parent->right) {
visit(parent)
node = parent;
stkNodes.pop();
} else {
stkNodes.push(parent->right);
break;
}
}
}
}
}
TreeNode *getFirst(TreeNode *root) {
if(!root)
return NULL;
TreeNode *node = root;
while(node->left)
node = node->left;
return node;
}
TreeNode *getNext(TreeNode *root, TreeNode *pre) {
if(!tree)
return;
bool bReturnNode = false;
stack
stkNodes.push(tree);
while(!stkNodes.empty()) {
TreeNode *node = stkNodes.top();
if(node == pre)
bReturnNode = true;
if(node->left)
stkNodes.push(node->left);
else if(node->right)
stkNodes.push(node->right);
else {
if(bReturnNode && node!=pre)
return node;
visit(node);
stkNodes.pop();
while(!stkNodes.empty()) {
TreeNode *parent = stkNodes.top();
if(!parent->right || node==parent->right) {
if(bReturnNode && parent!=pre)
return parent;
visit(parent)
node = parent;
stkNodes.pop();
} else {
stkNodes.push(parent->right);
break;
}
}
}
}
return NULL;
}
node
【在 s*********t 的大作中提到】
: 电面一家最近比较火的startup
: 实现二叉树的postorder traversal,我就写啊,递归,很快搞定,十行左右,然后面
: 试官说不用写这么多四、五就能搞定,想了想也改好了。
: follow up,不用递归,我就改啊,while循环,有个小错误,他提示之后,也写好了。
: 又follow up,在while循环的基础上,写getfirst函数,找到postorder的第一个node
: 指针,然后写个getnext函数,根据第一个接着一个一个找下去。我问能不能有额外内
: 存或者可不可以改变二叉树,比如删节点,回答说不行。然后就悲剧了,实在想不出
: getnext怎么写,最后把getfirst写好就到时间了。现在想想,单向的二叉树不可能实
: 现吧?!嗨,当时应该多问一句是不是双向的。
s*k
7 楼
跟chase家历史短就再考虑一下吧。另外总信用历史也要长,C家biz卡最近审查变严格了
w*1
8 楼
谢谢分享
p*2
10 楼
RF
h*u
14 楼
mark
s*r
18 楼
他们大多是富人~这里大多是待富者~
相关阅读