程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

根据后续数组重建搜索二叉树

发布于2019-08-20 10:56     阅读(1219)     评论(0)     点赞(27)     收藏(1)


题目:

给定一个整型数组arr,已知其中没有重复值,判断arr是否可能是节点值类型为整型的搜索二叉树后续遍历的结果

思路:根据搜索二叉树的性质,比后续数组最后一个元素值小的数组会在数组的左边,比数组最后一个元素值大的数组会在数组的右边。

  1. def isPostArray(arr):
  2. if arr == None or len(arr)==0:
  3. return False
  4. return isPost(arr,0,len(arr)-1)
  5. def isPost(arr,start,end):
  6. if start == end:
  7. return True
  8. less = -1
  9. more = end
  10. for i in range(start,end):
  11. if arr[i] < arr[end]:
  12. less = i
  13. else:
  14. if end == more:
  15. more = i + 1
  16. if less == -1 or more == end:
  17. return isPost(arr,start,end-1)
  18. if less!=more-1:
  19. return False
  20. return isPost(arr,start,less) and isPost(arr,less+1,end-1)
  21. 可参考例子: arr = [2,1,3,6,5,7,4] 4 <4 = [2,1,3] >4 = [6,5,7]

进阶问题:如果整型数组arr中没有重复值,且已知是一颗搜索二叉树的后续遍历结果,通过数组arr重构二叉树。

  1. class Node:
  2. def __init__(self,value):
  3. self.value = value
  4. self.left = None
  5. self.right = None
  6. def ArrayToBST(array):
  7. if array == None or len(array)==0:
  8. return None
  9. return ToBST(arr,0,len(array)-1)
  10. def ToBST(arr,start,end):
  11. if start > end:
  12. return None
  13. node = Node(arr[end])
  14. less = -1
  15. more = end
  16. for i in range(start,end):
  17. if arr[end] > arr[i]:
  18. less = i
  19. else:
  20. if more == end:
  21. more = i
  22. node.left = ToBST(arr,start,less)
  23. node.right = ToBST(arr,more,end-1)
  24. return node

 



所属网站分类: 技术文章 > 博客

作者:787sds

链接:https://www.pythonheidong.com/blog/article/49037/828c685ad384bb74951a/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

27 0
收藏该文
已收藏

评论内容:(最多支持255个字符)