Lthero 发表于 2021-4-25 15:12

【二叉树】已经中序和后序,构建一个二叉树

已经中序(infix)和后序(postfix),重新构建一个二叉树

在剑指office看到的题目,代码放在这里用作记录


中序:4、7、2、1、5、3、8、6
后序:7、4、2、5、8、6、3、1

0、输入的个数为length
1、记录后序最后一个结点的值post_infix(根结点)。如:根为1
2、找到中序的该结点位置下标root_index(从0开始),下标数字也表示当前根结点的左子树全部结点个数。如:根为1的中序root_index=3
3、递归找postfixroot_index](左子树)的根结点,片段的长度为root_index。如:找下标从【0~2】的根结点,长度length变为root_index=3
中序:4、7、2、1、5、3、8、6
后序:7、4、2、5、8、6、3、1
4、递归找postfix(右子树)的根结点,片段的长度为length-root_index-1。如:找下标从【3~length-1】的根结点,片段的长度length变为4
中序:4、7、2、1、5、3、8、6
后序:7、4、2、5、8、6、3、1

class TreeNode:
    def __init__(self, x):
      self.val = x
      self.left = None
      self.right = None

def create(postfix,infix,length):
    if length==0:
      return None
    temp=TreeNode(postfix)
    root_index=0
    while root_index<length:
      if infix==postfix:
            break
      root_index+=1
    print(temp.val,end=' ')
    if length>1:
      temp.left=create(postfix,infix,root_index)
      temp.right=create(postfix,infix,length-root_index-1)
    else:
      temp.left=None
      temp.right=None
    return temp
   
postfix=input('输入后序').split(' ')
infix=input('输入中序').split(' ')
length=len(infix)
print('-------------前序输出----------------')
root=create(postfix,infix,length)
print('\n-------------层序输出----------------')
queue=
while len(queue)!=0:
    x=queue.pop(0)
    print(x.val,end=' ')
    if x.left is not None:
      queue.append(x.left)
    if x.right is not None:
      queue.append(x.right)

#H M I D N J E B K F G C A
#H D M I B J N E A F K C G
页: [1]
查看完整版本: 【二叉树】已经中序和后序,构建一个二叉树