题目:

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

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

def isPostArray(arr):if arr == None or len(arr)==0:return Falsereturn isPost(arr,0,len(arr)-1)def isPost(arr,start,end):if start == end:return Trueless = -1more = endfor i in range(start,end):if arr[i] < arr[end]:less = ielse:if end == more:more = i + 1if less == -1 or more == end:return isPost(arr,start,end-1)if less!=more-1:return Falsereturn isPost(arr,start,less) and isPost(arr,less+1,end-1)可参考例子: arr = [2,1,3,6,5,7,4] 4 <4 = [2,1,3]  >4 = [6,5,7]

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

class Node:def __init__(self,value):self.value = valueself.left = Noneself.right = Nonedef ArrayToBST(array):if array == None or len(array)==0:return Nonereturn ToBST(arr,0,len(array)-1)def ToBST(arr,start,end):if start > end:return Nonenode = Node(arr[end])less = -1more = endfor i in range(start,end):if arr[end] > arr[i]:less = ielse:if more == end:more = inode.left = ToBST(arr,start,less)node.right = ToBST(arr,more,end-1)return node

根据后续数组重建搜索二叉树相关推荐

  1. 通过有序数组生成平衡搜索二叉树

    题目:给定一个有序数组sortArr,已知其中没有重复值,用这个有序数组生成一颗平衡搜索二叉树,并且该搜索二叉树中序遍历的结果与sortArr一致 思路:用有序数组最中间的数生成搜索二叉树的头节点,然 ...

  2. 判断一个数列是不是搜索二叉树后续遍历输出的结果

    剑平面阿里被问到这个,刚开始画了下看有什么性质,乱蒙了几个都被推翻了,初始感觉就是要O(n)的,因为印象中BST的构树都可以O(nlogn)搞定.然后剑平说最后一个数肯定是根节点,一下反应过来了,就是 ...

  3. 通过先序和中序数组生成后续数组

    题目:已知一颗二叉树所有的节点值都不同,给定这颗树正确的先序和中序数组,不要重建整颗树,而是通过这两个数组直接生成正确的后续数组 def getPosArray(pre,mid):if pre == ...

  4. Java实现BST:搜索二叉树

    文章目录 数据结构的定义 非递归增加节点 递归增加节点 非递归删除节点 递归删除节点 非递归搜索 递归搜索 先序遍历-递归 中序遍历-递归 后序遍历-递归 先序遍历-非递归 中序遍历-非递归 后序遍历 ...

  5. 调整搜索二叉树中两个错误的节点

    一棵二叉树原本是搜索二叉树,但是其中有两个节点调换了位置,使得这棵二叉树不再是搜索二叉树,请找到这两个错误节点并返回.已知二叉树中所有节点的 值都不一样,给定二叉树的头节点 head,返回一个长度为 ...

  6. 寻找搜索二叉树中两个错误的节点

    题目:一颗二叉树原本是搜索二叉树,但是其中有两个节点调换了位置,使得这颗二叉树不再是搜索二叉树,请找到两个错误节点并返回.已知二叉树中所有节点的值都不一样,给定二叉树的头节点head,返回一个长度为2 ...

  7. 算法练习day11——190329(平衡二叉树、搜索二叉树、完全二叉树)

    1.平衡二叉树 判断一棵树是否为平衡二叉树 1.1 分析 首先需要得到一个节点的以下四个信息: 左子树是否平衡: 右子树是否平衡: 左子树的高度: 右子树的高度. 接着,设计递归: 应该返回以此节点为 ...

  8. 左神算法:调整搜索二叉树中两个错误的节点(Java版)

    本题来自左神<程序员代码面试指南>"调整搜索二叉树中两个错误的节点"题目. 题目 原问题: 一棵二叉树原本是搜索二叉树,但是其中有两个节点调换了位置,使得这棵二叉树不再 ...

  9. java递归方法建立搜索二叉树,具备查找关键字,插入新节点功能

    二叉排序树的定义: 二叉排序树满足以下三个性质(BST性质): <1>若它的左子树非空,则左子树上所有节点的值均小于根节点的值 <2>若它的右子树非空,则右子树上所有节点的值均 ...

最新文章

  1. python xgboost用法_XGBoost类库使用小结
  2. IIS Permissions
  3. 【已修正】SAP中各个环境的简介
  4. 零基础学Python(第十三章 元组)
  5. 智慧物业小程序_刷脸支付+电商小程序+智慧酒店营销方案
  6. Python中的石头、剪刀、布游戏
  7. css 立体管道图_高层住宅管道井内密集管线施工方法研究
  8. Atitit.可视化编程jbpm6 的环境and 使用总结...
  9. 小米游戏本2019 I7 9750H 黑苹果安装教程【OC 引导 + Big Sur11.6.1】
  10. 第三门课 结构化机器学习项目(Structuring Machine Learning Projects)
  11. mysql 计算农历_公历转换农历算法
  12. 用c语言求解一元二次方程(共轭根除外)
  13. SQL 触发器-如何查看当前数据库中有哪些触发器
  14. android控制创维电视,创维电视怎么连接手机 创维电视连接手机的方法【详细介绍】...
  15. MIDI音乐制作概论,常用插件与流行音乐模板
  16. 服务器和电脑主机的区别
  17. 灵机一动-趣味问题种种
  18. OC--Foundation框架
  19. cad自动填写页码lisp,CAD图纸页码的自动生成-农夫也玩CAD
  20. 微信支付回调地址 http https问题

热门文章

  1. MySQL用户管理、常用SQL语句、MySQL数据库备份恢复
  2. 看来Kubernetes将一统天下?Docker也无法幸免
  3. Hillstone 防火墙备份脚本
  4. 天使投资乱象频出 熟人元素何时剔除
  5. mysql cluster 安装NDB二进制版本
  6. phpwind 8.7 发布主题 分析
  7. IDEA9+Tomcat热部署配置二法
  8. secureCRT上打印乱码的一种起因
  9. jquery程序 windows移植到linux显示不了,windows程序移植linux
  10. python中keyboardinterrupt_如何防止代码块在Python中被KeyboardInterrupt中断?