二叉树系列---判断给定的二叉树是否为二叉查找树
来源:互联网 发布:英魂之刃刷点卷软件 编辑:程序博客网 时间:2024/06/05 05:33
题目
判断给定的二叉树是否为二叉查找树
方法1
递归判断:先判断左子树是否为二叉查找树;再判断右子树;最后判断根(根小于左子树的最大节点值,大于右子树的最左节点值);
public boolean isValidBST(TreeNode root){ if(root==null){ return true; } if(root.left==null && root.right==null){ return true; } boolean l=isValidBST(root.left); boolean r=isValidBST(root.right); boolean res=l && r; if(root.left!=null){ TreeNode lnode=root.left; while(lnode.right!=null){ lnode=lnode.right; } if(lnode.val<root.val){ res=res && true; }else{ res=false; } } if(root.right!=null){ TreeNode rnode=root.right; while(rnode.left!=null){ rnode=rnode.left; } if(rnode.val>root.val){ res=res && true; }else{ res=false; } } return res; }
方法2
利用二叉查找树的性质:二叉查找树的中序遍历是有序的(从小到大);
先进行中序遍历得到中序序列,再判断中序序列是否有序;
public boolean isValidBST(TreeNode root){ ArrayList<Integer> inOrderList=new ArrayList<Integer>(); inOrder(inOrderList,root); for(int i=0;i<inOrderList.size()-1;i++){ if(inOrderList.get(i)>=inOrderList.get(i+1)){ return false; } } return true; } //得到中序序列 private void inOrder(ArrayList<Integer> inOrderList, TreeNode root) { if(root==null){ return; } inOrder(inOrderList,root.left); inOrderList.add(root.val); inOrder(inOrderList,root.right); }
0 0
- 二叉树系列---判断给定的二叉树是否为二叉查找树
- 判断给定的二叉树是否为二分查找树
- 判断给定二叉树是否为排序二叉树
- 判断给定的二叉树是否为二叉排序树
- 编写判断给定二叉树是否为二叉排序树的函数
- 判断给定的二叉树是否为二叉排序树
- 判断给定的二叉树是否为二叉排序树
- 判断一颗树是否为二叉查找树
- 判断二叉树是否二叉查找树
- 判断任意给定的二叉树是否为满二叉树
- 【二叉树】判断二叉树是否为平衡二叉树
- 二叉树系列---判断二叉树是否为平衡二叉树
- 二叉树系列四:Leetcode#98判断二叉树是否为二叉搜索树(BST)
- 二叉树系列五:判断二叉树是否为完全二叉树
- 判断给定的数组是否为二叉搜索树的后序遍历序列
- 如何判断一个二叉树是否是二叉查找树
- 判断是否是二叉查找树
- 判断一棵树是否是二叉查找树
- 对DXGI desktop duplication sample分析,改到MFC上
- Inverse和Cascade的比较
- Sublime3配置Python开发环境
- android截屏报getDrawingCache()==null
- NOIP模拟题 2016.11.5 [贪心] [坐标离散化] [循环序列LIS]
- 二叉树系列---判断给定的二叉树是否为二叉查找树
- 哈理工OJ 1847 擦除字符串(状压DP)
- Number
- org.hibernate.hql.ast.QuerySyntaxException is not mapped异常
- 求三角形面积
- pcl1.8.0 vs2013 win10 x64 安装配置及部分问题解决方法
- java面试必备之String类
- Andriod开发入门-第一行代码-第一个活动
- java面试必备之抽象类、接口