题目解析
按照题目意思,用例对应的二叉树如下:
按照中序遍历规则,左根右,遍历结果为:dbgehiafc 。
本题首先需要从给定字符串中解析出根、左子树、右子树信息,但是如果是从外到内解析,比如先提取最大的根:a,以及它的左右子树,那么将非常困难。大家可以尝试下。
我的解题思路是,利用栈结构,找到匹配的{,},然后提取出根、以及其左右子树,实现如下:
首先定义两个栈结构stack,idxs,
然后,遍历输入的字符串的字符:默认将非 } 的字符都压入stack栈中,如果遇到 { 字符,则记录它被压入stack栈中的索引位置到idxs中。
如果遇到 } 字符
则弹出idxs栈顶的 { 索引值idx,此时我们可以根据idx索引得到:
- 一颗子树的根,即stack[idx-1],比如h:a{b{d,e{g,h{ ,i
- 根下的左右叶子:即stack的idx+1~stack.size-1,比如,i