我遇到了一个问题,其中使用了三元表达式(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在数组中的位置。现在我们遇到了“:”,我们检查当前节点的父节点是否有两个子节点,如果有,则我们回溯并检查上一个节点,直到找到一个缺少右子节点的节点。
还有其他方法可以做到这一点吗?希望我表述清楚了。