由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 请教个G题目
相关主题
回馈本版,新鲜店面,新题新气象插入节点到complete binary tree的末尾
一道linked list编程题yelp 面经
yahoo onsite攒个人品发碗F家面筋
L家电面(最新) 攒RP 求bless生成树
热腾腾的 LinkedIn 电面题攒RPLeetCode 新题 graph clone
一道google面试题Interview question::
linkedin 电面面经!另求内推!!两道题都答出来了,还是跪了。 请大牛分析原因。这个check whether a binary tree is a BST or not
问个题,用递归方法题目: iterative binary tree post order traversal
相关话题的讨论汇总
话题: node话题: treenode话题: index话题: int话题: str
进入JobHunting版参与讨论
1 (共1页)
X*4
发帖数: 101
1
给一个string of nested ternary operations例如a?b?c:d:e,build a tree:root是
a,左子树是b?c:d对应的tree ,右子树是e。保证input都是valid的。
不太会写
p**********9
发帖数: 51
2
如果保证input都是valid的,用一个recursive应该很容易的。因为任何根节点一定从x
?开始。
X*4
发帖数: 101
3
有代码不

从x

【在 p**********9 的大作中提到】
: 如果保证input都是valid的,用一个recursive应该很容易的。因为任何根节点一定从x
: ?开始。

c******w
发帖数: 1108
4
第一个?前面的部分是root。
扫描过去找到对应第一个?的:,第一个?与这个:之间的substring是左子树,:的
右边的substring是右子树。
把左右子树对应的substring用recursion。
c******w
发帖数: 1108
5
好像有点问题
a?b:c?d:e
应该是a是跟,左子树是b,右子树是c?d:e吧?
c******w
发帖数: 1108
6
我这个跟题目里的例子不一样。
我这个难道不是一个nested ternary?
还有更复杂的形式例如 a?b?c:d:e?f:g
a******n
发帖数: 103
7
右孩子也有孩子怎么办?
a?b?c:d:e?f:g
这样呢?
p*****2
发帖数: 21240
8

明白了。

【在 c******w 的大作中提到】
: 我这个跟题目里的例子不一样。
: 我这个难道不是一个nested ternary?
: 还有更复杂的形式例如 a?b?c:d:e?f:g

p*****2
发帖数: 21240
9

这个行吗?
Node dfs(String str, int s, int e){
int i = s;
while(i i++;
if(i==e){
return new Node(str.substring(s, e+1));
}
int j=i+1;
int count=0;
while(j if(str.charAt(j) == '?')
count++;
if(str.charAt(j) == ':')
count--;
j++;
}

Node node = new Node(str.substring(s, i));
node.left = dfs(str, i+1, j-1);
node.right= dfs(str, j+1, e);
return node;
}

【在 c******w 的大作中提到】
: 我这个跟题目里的例子不一样。
: 我这个难道不是一个nested ternary?
: 还有更复杂的形式例如 a?b?c:d:e?f:g

x*******1
发帖数: 28835
10
G的题目真是千奇百怪,我一个都不会做。
相关主题
一道google面试题插入节点到complete binary tree的末尾
linkedin 电面面经!另求内推!!两道题都答出来了,还是跪了。 请大牛分析原因。yelp 面经
问个题,用递归方法攒个人品发碗F家面筋
进入JobHunting版参与讨论
y**********u
发帖数: 6366
11
kao, k哥对您来说小case了

【在 x*******1 的大作中提到】
: G的题目真是千奇百怪,我一个都不会做。
c******w
发帖数: 1108
12
应该就是这样。其实就是括号match

【在 p*****2 的大作中提到】
:
: 这个行吗?
: Node dfs(String str, int s, int e){
: int i = s;
: while(i: i++;
: if(i==e){
: return new Node(str.substring(s, e+1));
: }
: int j=i+1;

p*****2
发帖数: 21240
13

多谢大牛。

【在 c******w 的大作中提到】
: 应该就是这样。其实就是括号match
p*****2
发帖数: 21240
14

大牛,我下个月去SF找你呀。

【在 y**********u 的大作中提到】
: kao, k哥对您来说小case了
y**********u
发帖数: 6366
15
我是菜鸟不是大牛。。。欢迎欢迎!

【在 p*****2 的大作中提到】
:
: 大牛,我下个月去SF找你呀。

x*******1
发帖数: 28835
16
准备归了。 跟fb,狗,netflix都永别了。

【在 y**********u 的大作中提到】
: kao, k哥对您来说小case了
c******w
发帖数: 1108
17
您可别这么说。俺不敢当

【在 p*****2 的大作中提到】
:
: 大牛,我下个月去SF找你呀。

x*********3
发帖数: 1438
18
貌似没有必要这么复杂, 这个应该是O(n^2),下面是O(n)的。
简单起见,每个节点只有一个字符,str的话处理起来也很简单,直接读到:或?就
行了:
Node * dfs(char *& p)
{
if (!p || (!*p)|| *p == ':') return NULL;
Node * n = new Node(*p);
if (*(p+1) == '?')
{
p = p+2;
n->left = dfs(p);
++p;
}
if(*p++ == ':')
{
n->right = dfs(p);
}
return n;
}

【在 p*****2 的大作中提到】
:
: 大牛,我下个月去SF找你呀。

p*****2
发帖数: 21240
19

这个确实是可以优化。

【在 x*********3 的大作中提到】
: 貌似没有必要这么复杂, 这个应该是O(n^2),下面是O(n)的。
: 简单起见,每个节点只有一个字符,str的话处理起来也很简单,直接读到:或?就
: 行了:
: Node * dfs(char *& p)
: {
: if (!p || (!*p)|| *p == ':') return NULL;
: Node * n = new Node(*p);
: if (*(p+1) == '?')
: {
: p = p+2;

p*****2
发帖数: 21240
20

这个行吗?
int curr = 0;

Node dfs(String str){
if(curr >= str.length())
return null;

int i = curr;

while(i i++;

Node node = new Node(str.substring(curr, i));
curr = i+1;
if(i node.left = dfs(str);
node.right = dfs(str);
}
return node;
}

【在 x*********3 的大作中提到】
: 貌似没有必要这么复杂, 这个应该是O(n^2),下面是O(n)的。
: 简单起见,每个节点只有一个字符,str的话处理起来也很简单,直接读到:或?就
: 行了:
: Node * dfs(char *& p)
: {
: if (!p || (!*p)|| *p == ':') return NULL;
: Node * n = new Node(*p);
: if (*(p+1) == '?')
: {
: p = p+2;

相关主题
生成树这个check whether a binary tree is a BST or not
LeetCode 新题 graph clone题目: iterative binary tree post order traversal
Interview question::reverse链表
进入JobHunting版参与讨论
x*********3
发帖数: 1438
21
好像有Bug :)

【在 p*****2 的大作中提到】
:
: 这个行吗?
: int curr = 0;
:
: Node dfs(String str){
: if(curr >= str.length())
: return null;
:
: int i = curr;
:

c***r
发帖数: 280
22
这个思路不错,我给转成了个c++代码如下。只是觉得你的code里面,最后一个if语句
,是否node->right = dfs(str);该移到if外,在一个else if 里面, 这个else if条件
是 else if (i 我转的C++如下:
int curr = 0;
Node* tree_dfs(string str ) {
if(curr >= str.length())
return NULL;
int i = curr;
while(i i++;
Node* node = new Node(str.substr(curr, i-curr));
curr = i+1;
if(i node->left = tree_dfs(str);
}
else if (i node->right = tree_dfs(str);
}
return node;
}

【在 p*****2 的大作中提到】
:
: 这个行吗?
: int curr = 0;
:
: Node dfs(String str){
: if(curr >= str.length())
: return null;
:
: int i = curr;
:

p*****2
发帖数: 21240
23

bugfree好难。

【在 x*********3 的大作中提到】
: 好像有Bug :)
s******d
发帖数: 9806
24
一个stack就可以了,碰到?就压栈,碰到:就弹俩出来,连着:后面的那个,算好结果再
压回去。最后栈里只有一个元素,就是结果。

【在 X*4 的大作中提到】
: 给一个string of nested ternary operations例如a?b?c:d:e,build a tree:root是
: a,左子树是b?c:d对应的tree ,右子树是e。保证input都是valid的。
: 不太会写

x*********3
发帖数: 1438
25
边界上还有问题,不过最大的问题是最后那个else if,肯定不能要else的。

【在 c***r 的大作中提到】
: 这个思路不错,我给转成了个c++代码如下。只是觉得你的code里面,最后一个if语句
: ,是否node->right = dfs(str);该移到if外,在一个else if 里面, 这个else if条件
: 是 else if (i: 我转的C++如下:
: int curr = 0;
: Node* tree_dfs(string str ) {
: if(curr >= str.length())
: return NULL;
: int i = curr;
: while(i
c***r
发帖数: 280
26
不明白,给指点下?

的。

【在 x*********3 的大作中提到】
: 边界上还有问题,不过最大的问题是最后那个else if,肯定不能要else的。
x*********3
发帖数: 1438
27
这种recursive用if else的话,左右子树就搞不到一个root上去
了,是吧。
X*4
发帖数: 101
28
给一个string of nested ternary operations例如a?b?c:d:e,build a tree:root是
a,左子树是b?c:d对应的tree ,右子树是e。保证input都是valid的。
不太会写
p**********9
发帖数: 51
29
如果保证input都是valid的,用一个recursive应该很容易的。因为任何根节点一定从x
?开始。
X*4
发帖数: 101
30
有代码不

从x

【在 p**********9 的大作中提到】
: 如果保证input都是valid的,用一个recursive应该很容易的。因为任何根节点一定从x
: ?开始。

相关主题
mirror 一个binary tree, 用non-recursive解法怎么做一道linked list编程题
"Hacking a G Interview"怎么有这样低级错?yahoo onsite
回馈本版,新鲜店面,新题新气象L家电面(最新) 攒RP 求bless
进入JobHunting版参与讨论
c******w
发帖数: 1108
31
第一个?前面的部分是root。
扫描过去找到对应第一个?的:,第一个?与这个:之间的substring是左子树,:的
右边的substring是右子树。
把左右子树对应的substring用recursion。
c******w
发帖数: 1108
32
好像有点问题
a?b:c?d:e
应该是a是跟,左子树是b,右子树是c?d:e吧?

【在 p*****2 的大作中提到】
:
: bugfree好难。

c******w
发帖数: 1108
33
我这个跟题目里的例子不一样。
我这个难道不是一个nested ternary?
还有更复杂的形式例如 a?b?c:d:e?f:g

【在 p*****2 的大作中提到】
:
: bugfree好难。

a******n
发帖数: 103
34
右孩子也有孩子怎么办?
a?b?c:d:e?f:g
这样呢?

【在 p*****2 的大作中提到】
:
: bugfree好难。

p*****2
发帖数: 21240
35

明白了。

【在 c******w 的大作中提到】
: 我这个跟题目里的例子不一样。
: 我这个难道不是一个nested ternary?
: 还有更复杂的形式例如 a?b?c:d:e?f:g

p*****2
发帖数: 21240
36

这个行吗?
Node dfs(String str, int s, int e){
int i = s;
while(i i++;
if(i==e){
return new Node(str.substring(s, e+1));
}
int j=i+1;
int count=0;
while(j if(str.charAt(j) == '?')
count++;
if(str.charAt(j) == ':')
count--;
j++;
}

Node node = new Node(str.substring(s, i));
node.left = dfs(str, i+1, j-1);
node.right= dfs(str, j+1, e);
return node;
}

【在 c******w 的大作中提到】
: 我这个跟题目里的例子不一样。
: 我这个难道不是一个nested ternary?
: 还有更复杂的形式例如 a?b?c:d:e?f:g

x*******1
发帖数: 28835
37
G的题目真是千奇百怪,我一个都不会做。
y**********u
发帖数: 6366
38
kao, k哥对您来说小case了

【在 x*******1 的大作中提到】
: G的题目真是千奇百怪,我一个都不会做。
c******w
发帖数: 1108
39
应该就是这样。其实就是括号match

【在 p*****2 的大作中提到】
:
: 这个行吗?
: Node dfs(String str, int s, int e){
: int i = s;
: while(i: i++;
: if(i==e){
: return new Node(str.substring(s, e+1));
: }
: int j=i+1;

p*****2
发帖数: 21240
40

多谢大牛。

【在 c******w 的大作中提到】
: 应该就是这样。其实就是括号match
相关主题
L家电面(最新) 攒RP 求blesslinkedin 电面面经!另求内推!!两道题都答出来了,还是跪了。 请大牛分析原因。
热腾腾的 LinkedIn 电面题攒RP问个题,用递归方法
一道google面试题插入节点到complete binary tree的末尾
进入JobHunting版参与讨论
p*****2
发帖数: 21240
41

大牛,我下个月去SF找你呀。

【在 y**********u 的大作中提到】
: kao, k哥对您来说小case了
y**********u
发帖数: 6366
42
我是菜鸟不是大牛。。。欢迎欢迎!

【在 p*****2 的大作中提到】
:
: 大牛,我下个月去SF找你呀。

x*******1
发帖数: 28835
43
准备归了。 跟fb,狗,netflix都永别了。

【在 y**********u 的大作中提到】
: kao, k哥对您来说小case了
c******w
发帖数: 1108
44
您可别这么说。俺不敢当

【在 p*****2 的大作中提到】
:
: 大牛,我下个月去SF找你呀。

x*********3
发帖数: 1438
45
貌似没有必要这么复杂, 这个应该是O(n^2),下面是O(n)的。
简单起见,每个节点只有一个字符,str的话处理起来也很简单,直接读到:或?就
行了:
Node * dfs(char *& p)
{
if (!p || (!*p)|| *p == ':') return NULL;
Node * n = new Node(*p);
if (*(p+1) == '?')
{
p = p+2;
n->left = dfs(p);
++p;
}
if(*p++ == ':')
{
n->right = dfs(p);
}
return n;
}

【在 p*****2 的大作中提到】
:
: 大牛,我下个月去SF找你呀。

p*****2
发帖数: 21240
46

这个确实是可以优化。

【在 x*********3 的大作中提到】
: 貌似没有必要这么复杂, 这个应该是O(n^2),下面是O(n)的。
: 简单起见,每个节点只有一个字符,str的话处理起来也很简单,直接读到:或?就
: 行了:
: Node * dfs(char *& p)
: {
: if (!p || (!*p)|| *p == ':') return NULL;
: Node * n = new Node(*p);
: if (*(p+1) == '?')
: {
: p = p+2;

p*****2
发帖数: 21240
47

这个行吗?
int curr = 0;

Node dfs(String str){
if(curr >= str.length())
return null;

int i = curr;

while(i i++;

Node node = new Node(str.substring(curr, i));
curr = i+1;
if(i node.left = dfs(str);
node.right = dfs(str);
}
return node;
}

【在 x*********3 的大作中提到】
: 貌似没有必要这么复杂, 这个应该是O(n^2),下面是O(n)的。
: 简单起见,每个节点只有一个字符,str的话处理起来也很简单,直接读到:或?就
: 行了:
: Node * dfs(char *& p)
: {
: if (!p || (!*p)|| *p == ':') return NULL;
: Node * n = new Node(*p);
: if (*(p+1) == '?')
: {
: p = p+2;

x*********3
发帖数: 1438
48
好像有Bug :)

【在 p*****2 的大作中提到】
:
: 这个行吗?
: int curr = 0;
:
: Node dfs(String str){
: if(curr >= str.length())
: return null;
:
: int i = curr;
:

c***r
发帖数: 280
49
这个思路不错,我给转成了个c++代码如下。只是觉得你的code里面,最后一个if语句
,是否node->right = dfs(str);该移到if外,在一个else if 里面, 这个else if条件
是 else if (i 我转的C++如下:
int curr = 0;
Node* tree_dfs(string str ) {
if(curr >= str.length())
return NULL;
int i = curr;
while(i i++;
Node* node = new Node(str.substr(curr, i-curr));
curr = i+1;
if(i node->left = tree_dfs(str);
}
else if (i node->right = tree_dfs(str);
}
return node;
}

【在 p*****2 的大作中提到】
:
: 这个行吗?
: int curr = 0;
:
: Node dfs(String str){
: if(curr >= str.length())
: return null;
:
: int i = curr;
:

p*****2
发帖数: 21240
50

bugfree好难。

【在 x*********3 的大作中提到】
: 好像有Bug :)
相关主题
yelp 面经LeetCode 新题 graph clone
攒个人品发碗F家面筋Interview question::
生成树这个check whether a binary tree is a BST or not
进入JobHunting版参与讨论
s******d
发帖数: 9806
51
一个stack就可以了,碰到?就压栈,碰到:就弹俩出来,连着:后面的那个,算好结果再
压回去。最后栈里只有一个元素,就是结果。

【在 X*4 的大作中提到】
: 给一个string of nested ternary operations例如a?b?c:d:e,build a tree:root是
: a,左子树是b?c:d对应的tree ,右子树是e。保证input都是valid的。
: 不太会写

x*********3
发帖数: 1438
52
边界上还有问题,不过最大的问题是最后那个else if,肯定不能要else的。

【在 c***r 的大作中提到】
: 这个思路不错,我给转成了个c++代码如下。只是觉得你的code里面,最后一个if语句
: ,是否node->right = dfs(str);该移到if外,在一个else if 里面, 这个else if条件
: 是 else if (i: 我转的C++如下:
: int curr = 0;
: Node* tree_dfs(string str ) {
: if(curr >= str.length())
: return NULL;
: int i = curr;
: while(i
c***r
发帖数: 280
53
不明白,给指点下?

的。

【在 x*********3 的大作中提到】
: 边界上还有问题,不过最大的问题是最后那个else if,肯定不能要else的。
x*********3
发帖数: 1438
54
这种recursive用if else的话,左右子树就搞不到一个root上去
了,是吧。
k*****L
发帖数: 55
55
Let me try:
Node *ternary(string &s) {
if (s.size() == 0) return NULL;
stack st;
bool isLeft = true;
int prev = 0;
for (int i = 0; i < s.size(); ++i) {
if (s.at(i) == ‘?’ || s.at(i) == ‘:’) {
Node *newNode = new Node(s.substr(pref, i - pref));
if (!st.empty()) {
Node *n;
if (isLeft) {
n = st.top();
n->left = newNode;
} else {
n = st.pop();
n->right = newNode;
}
}
if (s.at(i) == ‘?’)
st.push(newNode);
isLeft = true;
pev = i + 1;
} else if (s.at(i) == ‘:’) {
isLeft = false;
prev = i + 1;
}
} else {
continue;
}
}
Node *root = NULL;
while (!st.empty())
root = st.pop();
return root;
}

【在 X*4 的大作中提到】
: 给一个string of nested ternary operations例如a?b?c:d:e,build a tree:root是
: a,左子树是b?c:d对应的tree ,右子树是e。保证input都是valid的。
: 不太会写

c******n
发帖数: 4965
56
这个就 recursive parse 最简单, 因为操作符左结合的, 反过来不行

【在 X*4 的大作中提到】
: 给一个string of nested ternary operations例如a?b?c:d:e,build a tree:root是
: a,左子树是b?c:d对应的tree ,右子树是e。保证input都是valid的。
: 不太会写

l******s
发帖数: 3045
57
//Recursive
public static TreeNode buildTree(string express)
{
int i = 0;
while (i < express.Length && express[i] != '?') i++;
TreeNode root = new TreeNode(express.Substring(0, i).Trim());
int index = i, count = 0;
while (index < express.Length && !(count == 0 && express[index] == ':'))
{
if (express[index] == '?') count++;
else if (express[index] == ':') count--;
if(count != 0) index++;
}
if (index >= express.Length) return root;
root.Left = buildTree(express.Substring(i + 1, index - i - 1).Trim());
root.Right = buildTree(express.Substring(index + 1).Trim());
return root;
}
//Iterative
public static TreeNode buildTree_Iterative(string express)
{
Stack stack = new Stack();
StringBuilder subExpress = new StringBuilder();
char lastOp = '\0';
for(int i = 0; i <= express.Length; i++)
if (i == express.Length || express[i] == '?' || express[i] == ':')
{
TreeNode newNode = new TreeNode(subExpress.ToString().Trim());
if(lastOp == '?') stack.Peek().Left = newNode;
else if (lastOp == ':')
{
stack.Pop();
stack.Peek().Right = newNode;
if(stack.Count > 1) stack.Pop();
}
stack.Push(newNode);
if(i < express.Length) lastOp = express[i];
subExpress.Clear();
}
else subExpress.Append(express[i]);
while (stack.Count > 1) stack.Pop();
return stack.Pop();
}
s**x
发帖数: 7506
58

嗯,root 除了左右子树外,还应该有第三棵子树做为?之前的值,这个原题没讲清楚。

【在 a******n 的大作中提到】
: 右孩子也有孩子怎么办?
: a?b?c:d:e?f:g
: 这样呢?

s**x
发帖数: 7506
59

很不错,感觉要处理?前的值也可以子树就対了。

【在 x*********3 的大作中提到】
: 貌似没有必要这么复杂, 这个应该是O(n^2),下面是O(n)的。
: 简单起见,每个节点只有一个字符,str的话处理起来也很简单,直接读到:或?就
: 行了:
: Node * dfs(char *& p)
: {
: if (!p || (!*p)|| *p == ':') return NULL;
: Node * n = new Node(*p);
: if (*(p+1) == '?')
: {
: p = p+2;

r*****n
发帖数: 35
60
case class TreeNode(value: Char, var left: Option[TreeNode] = None, var
right: Option[TreeNode] = None)
object TreeBuilder {
//recursive version
def recursive(input: String, start: Int): (Int, Option[TreeNode]) ={
if (start >= input.length) {
(start, None)
} else {
val cur = Some(TreeNode(input(start)))
if (start == input.length - 1) {
(start + 1, cur)
} else {
input(start + 1) match {
case '?' =>
val (loffset, l) = recursive(input, start + 2)
val (roffset, r) = recursive(input, loffset)
cur.get.left = l
cur.get.right = r
(roffset, cur)
case ':' =>
(start + 2, cur)
}
}
}
}
// iterative version
def buildTree(input:String): Option[TreeNode] = {
if (input.length == 0) {
return None
}
val stack = new mutable.Stack[TreeNode]()
val root = Some(TreeNode(input(0)))
var cur: TreeNode = root.get
var left = false
(1 until input.length).foreach { x=>
input(x) match {
case '?' =>
left = true
stack.push(cur)
case ':' =>
case _ =>
if (left) {
cur.left = Some(TreeNode(input(x)))
left = false
cur = cur.left.get
} else {
cur = stack.pop()
cur.right = Some(TreeNode(input(x)))
cur = cur.right.get
}
}
}
root
}
}
相关主题
题目: iterative binary tree post order traversal"Hacking a G Interview"怎么有这样低级错?
reverse链表回馈本版,新鲜店面,新题新气象
mirror 一个binary tree, 用non-recursive解法怎么做一道linked list编程题
进入JobHunting版参与讨论
m****t
发帖数: 23
61
seems recursive is the easiest. I am still trying to figure out a stack-
based approach:-)
class TreeNode{
public:
string str;
TreeNode* left;
TreeNode* right;
TreeNode(string s) {
str = s;
left = NULL;
right = NULL;
}
};
class Solution {
public:
TreeNode* buildTree(string &A, int& index) {
int index_next = A.find_first_of("?:",index);
if (index_next==string::npos) {
TreeNode* root = new TreeNode(A.substr(index));
index = A.size();
return root;
}
TreeNode* root = new TreeNode(A.substr(index, index_next-index));
if (A[index_next]=='?') {
index = index_next+1;
root->left = buildTree(A, index);
root->right = buildTree(A, index);
} else {
index = index_next+1;
}
return root;
}
TreeNode* buildTree(string &A) {
int index = 0;
return buildTree(A, index);
}
};

【在 X*4 的大作中提到】
: 给一个string of nested ternary operations例如a?b?c:d:e,build a tree:root是
: a,左子树是b?c:d对应的tree ,右子树是e。保证input都是valid的。
: 不太会写

m****t
发帖数: 23
62
stack based approach
TreeNode* buildTreeStack(string &A) {
stack s_nodes;
stack s_operators;
int index = 0;
while (index if (A[index]=='?') {
s_operators.push(A[index]);
index++;
} else if (A[index]==':') {
if (s_operators.top()=='?') {
s_operators.push(A[index]);
} else {
// pop three things from the s_nodes, and form the
subtree
TreeNode* new_right = s_nodes.top(); s_nodes.pop();
TreeNode* new_left = s_nodes.top(); s_nodes.pop();
TreeNode* new_root = s_nodes.top(); s_nodes.pop();
s_operators.pop(); s_operators.pop();
new_root->left = new_left;
new_root->right = new_right;
s_nodes.push(new_root);
s_operators.push(A[index]);
}
index++;
} else { // regular node
int index_next = A.find_first_of("?:", index);
if (index_next==string::npos) {
TreeNode* new_node = new TreeNode(A.substr(index));
index = A.size();
s_nodes.push(new_node);
} else {
TreeNode* new_node = new TreeNode(A.substr(index, index_
next-index));
index = index_next;
s_nodes.push(new_node);
}
}
}
while (!s_operators.empty()) {
TreeNode* new_right = s_nodes.top(); s_nodes.pop();
TreeNode* new_left = s_nodes.top(); s_nodes.pop();
TreeNode* new_root = s_nodes.top(); s_nodes.pop();
s_operators.pop(); s_operators.pop();
new_root->left = new_left;
new_root->right = new_right;
s_nodes.push(new_root);
}
return s_nodes.top();
}

【在 m****t 的大作中提到】
: seems recursive is the easiest. I am still trying to figure out a stack-
: based approach:-)
: class TreeNode{
: public:
: string str;
: TreeNode* left;
: TreeNode* right;
: TreeNode(string s) {
: str = s;
: left = NULL;

b***e
发帖数: 1419
63
你这个题是有歧义的:
a?b:c?d:e
这个string的解释取决于那个符号的优先级高。

【在 X*4 的大作中提到】
: 给一个string of nested ternary operations例如a?b?c:d:e,build a tree:root是
: a,左子树是b?c:d对应的tree ,右子树是e。保证input都是valid的。
: 不太会写

1 (共1页)
进入JobHunting版参与讨论
相关主题
题目: iterative binary tree post order traversal热腾腾的 LinkedIn 电面题攒RP
reverse链表一道google面试题
mirror 一个binary tree, 用non-recursive解法怎么做linkedin 电面面经!另求内推!!两道题都答出来了,还是跪了。 请大牛分析原因。
"Hacking a G Interview"怎么有这样低级错?问个题,用递归方法
回馈本版,新鲜店面,新题新气象插入节点到complete binary tree的末尾
一道linked list编程题yelp 面经
yahoo onsite攒个人品发碗F家面筋
L家电面(最新) 攒RP 求bless生成树
相关话题的讨论汇总
话题: node话题: treenode话题: index话题: int话题: str