0
点赞
收藏
分享

微信扫一扫

二叉树中序、后序求先序和先序、中序求后序

三维控件研究 2022-04-08 阅读 117
pythonb树

根据中序、后序求先序

s1 = input()  # 中序
s2 = input()  # 后序
root = ''


def postOrder(s1, s2):
    if s1 != '':
        len_s = len(s1)
        root = s2[len_s-1]
        print(root,end="")
        index_s = s1.find(root)

        s1_left = s1[:index_s]
        s1_right = s1[index_s + 1:len_s]

        len_right = len(s1_right)
        len_left = len(s1_left)

        s2_left = s2[:len_left]
        s2_right = s2[len_left:len_s-1]

        if len_left > 0:
            postOrder(s1_left,s2_left)
        if len_right > 0:
            postOrder(s1_right,s2_right)


postOrder(s1,s2)

根据先序、中序求后序

s1 = input()  # 前序
s2 = input()  # 中序
list1 = []
root = ""


def postOrder(s1, s2):
    if (s1 != ""):
        len_s = len(s1)
        root = s1[0]

        list1.append(s1[0])  # 根

        index_s = s2.find(root)
        s2_left = s2[0:index_s]
        s2_right = s2[index_s + 1:len_s]
    

        len_left = len(s2_left)
        len_right = len(s2_right)
        s1_left = s1[1:len_left + 1]
        s1_right = s1[len_left + 1:len_s]
        

        if (len_right > 0):
            postOrder(s1_right, s2_right)  # 右子树
        if (len_left > 0):
            postOrder(s1_left, s2_left)  # 左子树


postOrder(s1, s2)

for i in range(len(list1)):
    print(list1.pop(), end='')
print()

利用简单的递归,就不用打板子啦!

举报

相关推荐

0 条评论