●数组list这个大数据不推荐使用.因为会发生扩容操作,这个操作O(N),推荐使用双端队列来做替代.

用2种顺序回复二叉树.

'''
利用先序数组和中序数组回复2查数
'''
class node():
    def __init__(self,val):
        self.left=None
        self.right=None
        self.val=val
def main(list_pre,list_mid):
    if list_pre==[]:
        return None
    a=list_pre
    b=list_mid
    head=node(a[0])
    qiefen=b.index(head.val)
    b1=b[:qiefen]
    b2=b[qiefen+1:]
    a1=a[1:qiefen+1]
    a2=a[qiefen+1:]
    head.left=main(a1,b1)
    head.right=main(a2,b2)
    return head
print(main([1,2,4,5,8,9,3,6,7],[4,2,8,5,9,1,6,3,7]).val)
head=main([1,2,4,5,8,9,3,6,7],[4,2,8,5,9,1,6,3,7])
'''
按层打印
'''
print('下面按层便利输出,看结果对不对')
a=[head]
print(a[0].val)
while set(a)!=set([None]):
 b=[]
 for i in a:
  if i!=None:
     b.append(i.left)

     b.append(i.right)
 c=[]
 for j in b:
     if j!=None:
         c.append(j.val)
     else:
         c.append(None)
 print(c)
 a=b#经验证对了.
'''
中序和后序.反向切割即可.
'''
'''
先序和后序结合重构二叉树.
如果加入条件节点值都不同的二叉树,也大多情况下无法重构出来.
比如:头结点是1,左孩子是2,有孩子是null
头结点是1 做儿子是null 右二子是2
他们的数组都是一样的.
#只有每个节点的孩子数都是0或者2的2茶树才能被先序和后序重构出来.
通过找坐标做分割即可.
思路:头,左,右
     左,右,头  分别是两种便利.
     那么如何找到左和右的切分坐标?
     只需要找到第一排左里面第一个元素,找到他在第二排里面的位置就是.第二排左的最后一个位置了.
     因为他是做的head.(前提是二叉树里面元素取值都不相同)
'''
View Code

相关文章:

  • 2022-01-21
  • 2021-04-09
  • 2021-06-24
  • 2021-07-19
  • 2021-07-06
  • 2021-08-18
  • 2022-12-23
猜你喜欢
  • 2021-12-13
  • 2021-07-03
  • 2021-09-23
  • 2021-04-15
  • 2021-09-17
  • 2021-12-22
  • 2021-10-07
相关资源
相似解决方案