【发布时间】:2015-02-12 21:10:46
【问题描述】:
我遇到了这个问题,它具有三元表达式 (a?b:c),需要将三元表达式转换为二叉树结构。
a?b:c
a
/ \
b c
a?b?c:d:e
a
/ \
b e
/ \
c d
我使用使用数组实现的二叉树的方法:-
父母居住在 -i 左孩子 - 2i 右孩子 - 2i+1
开始解析三元表达式,第一个字符将形成根节点,因此它将位于数组中的位置 1。如果下一个字符是“?”那么后面的字符将是它的孩子,所以左孩子(在这种情况下,b 将位于位置 2)。如果下一个字符是“:”,那么我们找到了正确的孩子(第一种情况下是 c),所以我们将其添加到位置 3。
在第二种情况下,我们面临一个“?”在 b 之后,因此后面的任何内容都将是它的子节点,并将分别添加到 2j 和 2j+1 中,其中 j 是 b 在数组中的位置。现在我们面对一个“:”,我们检查当前子节点的父节点是否有两个然后我们回溯并检查前一个节点,直到找到缺少右孩子的节点。
还有其他方法可以做到这一点吗?希望我已经足够清晰了。
【问题讨论】:
标签: binary-tree ternary-operator data-conversion