Redian新闻
>
pets版争论指南, 今天发贴前必看
avatar
pets版争论指南, 今天发贴前必看# pets - 心有所宠
N*o
1
其他人却付伪币呢
avatar
S*I
2
☆─────────────────────────────────────☆
princekim (Prince Kim) 于 (Wed Apr 11 09:32:26 2012, 美东) 提到:
BT树结构, 中间节点是算数运算符(只有+ - * / 4种操作), 叶节点是数字, 要求给出
算数表达式 (要求没有冗余括号)
比如
*
/ \
+ *
/ \ / \
1 2 4 5

表达式 = (1 + 2) * 4 * 5, 不能是 (1+2)*(4*5)
+
/ \
* +
/ \ / \
1 2 4 5
表达式 = 1 * 2 + 4 + 5, 不能是 1 * 2 + (4 + 5)
总之, 这题的难点是 算数表达式不能有冗余括号
我当时的思路: in-order 递归遍历, 遇到 + - 给出左右括号 (但这样就有冗余括号).
面试官指出后, 我说我可以再扫描遍得到的表达式,去除冗余括号 (这也是我情急下
蒙的).
他说不行, 只能在遍历BT时一次完成. 他提示考虑运算符的优先级, 但后来时间到了,
也就草草收场
真心请教思路, 多谢
=========================================
class Node{
char value;
Node left, right;
}
class ArithExp{
ArrayList expression = new ArrayList(); //
global variable

/*
* recursion, in-order walk
*/
public static void in_order_walk(Node root){
if(root == null)
return;

// store result at expression
// for arithmetical operations, only + - need (), * / don't need ()
if(root.value == '+' || root.value == '-')
expression.add('(');

in_order_walk(root.left);
expression.add(root.value);
in_order_walk(root.right);

if(root.value == '+' || root.value == '-')
expression.add(')');

}
}

=========================================
☆─────────────────────────────────────☆
sandra1210 (sandra1210) 于 (Wed Apr 11 10:58:35 2012, 美东) 提到:
传parent的指针下去,如果parent的运算符优先级高 则加()否则直接返回结果;
int get_priority(node *root){
if(!root) return 0;
if(root->operator == ‘+’ || root->operator == ‘-’) return 1;
return 2;
}
string get_expression(node *root, node *parent){
if(!root->left && !root->right) return root->operand;
string ans;
string left = get_expression(root->left, root);
string right = get_expression(root->right, root);
if(get_priority(parent) > get_priority(root)){
ans += “(“ + left + root->operator+ right + “)”;
}
else ans = left + root->operator + right;
return ans;
}
get_expression(root, NULL);
☆─────────────────────────────────────☆
princekim (Prince Kim) 于 (Wed Apr 11 12:04:23 2012, 美东) 提到:
对的,多谢。
本来我想在Node中增加个parent, 但是你的方法很好,把current node作为parent传给
child
☆─────────────────────────────────────☆
zhangh (zhuangzhuang) 于 (Wed Apr 11 13:25:27 2012, 美东) 提到:
zan

☆─────────────────────────────────────☆
wwwyhx (wwwyhx) 于 (Wed Apr 11 13:48:55 2012, 美东) 提到:
MS电面还问技术题?????
☆─────────────────────────────────────☆
yishan (易山风雨易江秋) 于 (Wed Apr 11 14:29:11 2012, 美东) 提到:
1. 对比运算符节点与其父节点的运算优先级。
2. 如果某运算符节点是右节点,同时其父节点是"-"或“/”,注意反转效果。
比如: a + b - (c + d) 或 a + b / (c / d),此时括号不可收略
☆─────────────────────────────────────☆
flyinocean12 (生无所求) 于 (Wed Apr 11 18:13:11 2012, 美东) 提到:
第2点很好,没注意到
☆─────────────────────────────────────☆
bajiezhu (zhu tou) 于 (Thu Apr 12 05:38:42 2012, 美东) 提到:
谢谢楼上各位的讨论和CODE。很有启发性。
public static string GetExpression(Node node, string parentOp, bool?
isLeft=null)
{
if (node.Operator == null) return node.Operand.ToString();
bool addParenthesis = ToAdd2(node, parentOp, isLeft);
return ((addParenthesis) ? "(" : "") +
GetExpression(node.Left, node.Operator, true) +
node.Operator +
GetExpression(node.Right, node.Operator, false) +
( (addParenthesis) ? ")" : "");
}
private static bool ToAdd2(Node opNode, string parentOp, bool?
isLeft)
{
if (isLeft == null) return false;
int[,] array = isLeft.Value? LeftMatrix : RightMatrix;
return array[GetOp(parentOp), GetOp(opNode.Operator)] == 1;
}
private static int GetOp(string op)
{
switch (op)
{
case ("+"): return 0;
case ("-"): return 1;
case ("*"): return 2;
case ("/"): return 3;
default: return 0;
}
}
private static int[,] LeftMatrix =
{
{0, 0, 0, 0},
{0, 0, 0, 0},
{1, 1, 0, 0},
{1, 1, 0, 0}
};
private static int[,] RightMatrix =
{
{0, 0, 0, 0},
{1, 1, 0, 0},
{1, 1, 0, 0},
{1, 1, 1, 1}
};
☆─────────────────────────────────────☆
princekim (Prince Kim) 于 (Thu Apr 12 15:18:51 2012, 美东) 提到:
电面, 大概给了20分钟。当时他给的例子很简单,只是要我不要冗余括号。
avatar
G*Y
3
【 以下文字转载自 Seattle 讨论区 】
发信人: GGYY (唧唧歪歪), 信区: Seattle
标 题: 也上薰衣草
发信站: BBS 未名空间站 (Tue Jul 20 03:34:31 2010, 美东)
如题
avatar
y*u
4
[updated by PALA]: 所有版务投诉相关帖,支持的,反对的,都合集了放在精华区目
录下。
http://74.53.4.74/bbsdoc3/thinking.faq/pets/board_affair/8/D132
再想讨论版务的,请去投诉版吧。现在还有开新贴讨论这些的,一律直接删。
============================================================================
发现我此刻还是版务,那就得做点事情,给大家个指南吧。
事情原始贴:http://www.mitbbs.com/article_t2/pets/32282235.html
事情发展贴:考古请站内搜索30天内的"合集",或者精华区->宠物宠务->争议话题
支持弹劾柴鱼者: 请去complain版面回应
http://www.mitbbs.com/article_t/Complain/31280179.html
反对弹劾柴鱼者: 请去complain版面回应
http://www.mitbbs.com/article_t/Complain/31280179.html
支持弹劾pala者:请去complain版面回应
http://www.mitbbs.com/article_t/Complain/31280089.html
反对弹劾pala者: 请去complain版面回应
http://www.mitbbs.com/article_t/Complain/31280089.html
关心pala私生活者: 请申请开"我们都爱pala"俱乐部
厌恶pala说话做事风格者: 请申请开"我们都恨pala"俱乐部
喜欢pets者,请继续发照片,和其他任何和pets有关的贴。 我不锁贴,免的被戴上控
制言论自由的帽子,但希望大家自觉不要违反版规,不要让讨论个人事情占据整个版面
,还有很多新ID旧ID要问问题,求祝福和发PP。
谢谢!
avatar
c*r
5
未必虽然是虚拟
但也有一定价值了
所以本质没有区别
只是量上有区别
你付的多一点而已

【在 N*********o 的大作中提到】
: 其他人却付伪币呢
avatar
G*Y
6
总得来说,
跟以往一样,
这次拍的比较失败。
站在大片的薰衣草田里,
也没有太多想法,
其乐喀嚓一通乱按,
收工。
想照着宣传画拍一张平行线汇聚的远方的。
发现麦田太小。
视角太低,
似乎拍不出那种。

【在 G**Y 的大作中提到】
: 【 以下文字转载自 Seattle 讨论区 】
: 发信人: GGYY (唧唧歪歪), 信区: Seattle
: 标 题: 也上薰衣草
: 发信站: BBS 未名空间站 (Tue Jul 20 03:34:31 2010, 美东)
: 如题

avatar
k*8
7
你要买谁的相片?

【在 N*********o 的大作中提到】
: 其他人却付伪币呢
avatar
d*0
8
zan
avatar
y*2
9
你的。直接卖他得了。肖像权很贵的。

【在 k*******8 的大作中提到】
: 你要买谁的相片?
avatar
k*r
10


【在 G**Y 的大作中提到】
: 总得来说,
: 跟以往一样,
: 这次拍的比较失败。
: 站在大片的薰衣草田里,
: 也没有太多想法,
: 其乐喀嚓一通乱按,
: 收工。
: 想照着宣传画拍一张平行线汇聚的远方的。
: 发现麦田太小。
: 视角太低,

avatar
N*o
11
当然是你的了
别人我买的有什么好看的?

【在 k*******8 的大作中提到】
: 你要买谁的相片?
avatar
S*M
12
光线不好
另外过点曝

【在 G**Y 的大作中提到】
: 总得来说,
: 跟以往一样,
: 这次拍的比较失败。
: 站在大片的薰衣草田里,
: 也没有太多想法,
: 其乐喀嚓一通乱按,
: 收工。
: 想照着宣传画拍一张平行线汇聚的远方的。
: 发现麦田太小。
: 视角太低,

avatar
s*j
13
靠。。你俩又暧昧上了

【在 N*********o 的大作中提到】
: 当然是你的了
: 别人我买的有什么好看的?

avatar
N*o
14
我怎么没看出来

【在 s*****j 的大作中提到】
: 靠。。你俩又暧昧上了
avatar
L*1
15
别人更聪明点?
avatar
N*o
16
我很奔么?

【在 L******1 的大作中提到】
: 别人更聪明点?
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。