讨论一道L的validate binary tree和求深度的问题# JobHunting - 待字闺中
h*e
1 楼
原题在这儿:
http://www.careercup.com/question?id=13262681
简单的说,就是二叉树的一个结点如果一个子树为空,就用0表示,
非空用(...)嵌套表示。叶子结点就是(00)。例如
o -> (00)
o
/
o -> ((00)0)
o
/ \
o o -> ((00)(00))
现在给定一个字符串,要判断它是否表示的是一个有效的二叉树。
是的话返回树的深度,不是的话返回-1。
我的想法是用一个堆栈:碰到(00)的话,就压1入栈;碰到0或)
的话就和栈内的元素比较以后化简,如(01)变成2, (12)变成3之类的。
例如((00)(0(00)))的化简过程就是:
((00)(0(00))) -> (1(0(00))) -> (1(01)) -> (12) -> 3
最后返回3-1=2
这样程序写出来差不多要七八十行,而且调试好多次以后才做对。
请问有没有更简洁的办法?
http://www.careercup.com/question?id=13262681
简单的说,就是二叉树的一个结点如果一个子树为空,就用0表示,
非空用(...)嵌套表示。叶子结点就是(00)。例如
o -> (00)
o
/
o -> ((00)0)
o
/ \
o o -> ((00)(00))
现在给定一个字符串,要判断它是否表示的是一个有效的二叉树。
是的话返回树的深度,不是的话返回-1。
我的想法是用一个堆栈:碰到(00)的话,就压1入栈;碰到0或)
的话就和栈内的元素比较以后化简,如(01)变成2, (12)变成3之类的。
例如((00)(0(00)))的化简过程就是:
((00)(0(00))) -> (1(0(00))) -> (1(01)) -> (12) -> 3
最后返回3-1=2
这样程序写出来差不多要七八十行,而且调试好多次以后才做对。
请问有没有更简洁的办法?