1.什么是二叉搜索树?
二叉搜索树:如果一棵树为空树,那么是二叉搜索树;如果左子树的所有节点都小于根节点,右子树所有节点都大于根节点,那么是二叉搜索树
2.那么怎么编码呢?
根据BST的定义,我们往往想到使用递归来判断,那么会写出下面的代码,这样是错误的,因为仅能保证:左孩子<根<右孩子,不能保证左子树<根<右子树

 public static  boolean is_BST(Node head){if(head==null)return true;if(head.left!=null&&head.left.value>head.value)return false;if(head.right!=null&&head.right.value<head.value)return false;if(!is_BST(head.left)||!is_BST(head.right))return true;elsereturn false;}

3.那么怎样改进呢?
保证每次判断的节点都大于左子树最大,小于右子树的最小即可

//获取最大值public static int max_value(Node head){if(head==null)return Integer.MAX_VALUE;while(head.right!=null)head=head.right;return head.value;}//获取最小值public static int min_value(Node head){if(head==null)return Integer.MIN_VALUE;while(head.left!=null)head=head.left;return head.value;}public static boolean is_bst(Node head){if(head==null)return true;//根节点小于左子树最大值,判错if(head.left!=null&&max_value(head.left)>head.value)return false;//根节点大于左子树最小值,判错if(head.right!=null&&min_value(head.right)<head.value)return false;if(!is_BST(head.left)||!is_BST(head.right))return true;elsereturn false;}

3.非递归版本
二叉搜索树是中序有序的,因为左子树<根<右子树

public static boolean is_Bst(Node head){Stack<Node> stack= new Stack<Node>();Vector<Integer> arr=new Vector<Integer>();Node point=head;while(!stack.isEmpty()||point!=null){while(point!=null){stack.push(point);point=point.left;}if(!stack.isEmpty()){point=stack.pop();arr.add(point.value);point=point.right;}   }for(int i=1;i<arr.size();i++)if(arr.get(i-1)>arr.get(i))return false;return true;}

判断一棵树是否是二叉搜索树相关推荐

  1. 数据结构---判断一棵树是否是二叉搜索树

    数据结构-判断一棵树是否是二叉搜索树 代码: #pragma once #define N 100 #define elemType BTree* #include<stdlib.h> t ...

  2. 每天一道LeetCode-----判断某棵树是否是二叉搜索树

    Validate Binary Search Tree 原题链接Validate Binary Search Tree 判断一颗树是否是二叉搜索树,一棵树是BST需要满足 一个节点的值大于它左子树所有 ...

  3. 数据结构中常见的树(BST二叉搜索树、AVL平衡二叉树、RBT红黑树、B-树、B+树、B*树)

    原文:http://blog.csdn.net/sup_heaven/article/details/39313731 数据结构中常见的树(BST二叉搜索树.AVL平衡二叉树.RBT红黑树.B-树.B ...

  4. AVL树(平衡二叉搜索树)详解及C++代码实现

    AVL树简介 AVL树实际上一个引入了平衡因子的二叉搜索树,该平衡因子保证了每个节点的左右子树高度之差的绝对值不超过1,这样就可以降低树的高度,减少平均搜索长度. 一棵AVL树或者是空树,或者是具有以 ...

  5. AVL树(平衡二叉搜索树)

    AVL树 一.AVL树 1.AVL树的概念 2.AVL树节点的定义(描述) 3.AVL树的插入 4.AVL树的旋转 (1)左单旋 (2)右单旋 (3)左右双旋 (4)右左双旋 (5)插入的整体代码 5 ...

  6. 【数据结构与算法】之深入解析“把二叉搜索树转换为累加树”和“从二叉搜索树到更大和树”的求解思路与算法示例

    一.题目要求 ① 把二叉搜索树转换为累加树 给出二叉搜索树的根节点,该树的节点值各不相同,请将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 no ...

  7. 判定一棵二叉树是否是二叉搜索树

    问题 给定一棵二叉树,判定该二叉树是否是二叉搜索树(Binary Search Tree)? 解法1:暴力搜索 首先说明一下二叉树和二叉搜索树的区别.二叉树指这样的树结构,它的每个结点的孩子数目最多为 ...

  8. 判断一颗二叉树是否为二叉搜索树(Validate Binary Search Tree)

    一.学习要点: 利用二叉搜索树的中序遍历为递增数组的性质: 二.代码: void middle(node* root,vector<int>& inorder) {if(root= ...

  9. 按照层次序列创建二叉树,并判断二叉树是否为二叉搜索树

    首先定义树节点的数据结构,如下: struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; }; 两个函数,用 ...

最新文章

  1. 【HDOJ】3345 War Chess
  2. Lucene:依据索引查找文档
  3. Edit Distance编辑距离(NM tag)- sam/bam格式解读进阶
  4. 使用iframe+postMessage跨域操作和通信
  5. 这个网盘下载60MB/s!PanDownload复活了!
  6. sublime php语法检查
  7. ajax传值controller怎么写,ajax向 controller传值(示例代码)
  8. 【电脑百科】BT种子
  9. Java——can U do
  10. php之mysql(数据库的连接)出错问题及解决,cmd操作数据库失败
  11. linux屏保程序,桌面技巧小贴士 Linux下制作屏保程序
  12. Word如何插入图片
  13. Vue在Nginx的使用
  14. 芯片测试需要掌握什么软件,芯片测试工程师岗位职责
  15. 阿里云cdn以及阿里云负载均衡配置方法
  16. 计算机打文档的技巧,电脑word文档下划线怎么打(word文档编辑小技巧)
  17. 从4G到5G,从物联网到云计算 通信的下一个引爆点在哪里?
  18. 和菜头-和腾讯新闻哥谈谈腾讯价值观
  19. 常见的数据分析师的面试问题 完整文件放在GitHub链接上了!!!擅用crtl + F
  20. 商汤科技研究院招聘见习算法研究员

热门文章

  1. KubeCon+CloudNativeCon 资料
  2. matlab计算最小二乘问题,MATLAB求解方程的最小二乘解问题
  3. PAT Basic Level 1032 挖掘机技术哪家强(C++实现)
  4. 部分窗帘甲醛残留多会损害健康
  5. 无界鼠标,更新系统后连不上
  6. 软件开发人员的三条职业路径
  7. The GAMEE Jam 游戏创作大赛
  8. SDUT实验七编程题7-1 sdut- C语言实验—计算表达式
  9. 如何使用zip工具类打包下载压缩图片?
  10. NRF52832学习笔记(1)——搭建环境、编译烧写