二叉查找树的判断
来源:互联网 发布:apache kylin 2.0安装 编辑:程序博客网 时间:2024/06/07 04:46
题目:给定树的根结点指针TreeNode* root,请返回一个bool,代表该树是否为二叉查找树。
方法一
二叉查找树中序遍历后的结果是有序的,根据这个结果,可以中序遍历二叉树,并把遍历结果存放在一个数组里面,然后判断这个数组大小是否是有序数组,如果是有序数组,则是二叉查找树,否则就不是。时间复杂度是O(N),空间复杂度O(N)。
class Checker {public: vector<int> result; //中序遍历二叉树,并将节点值存入vector中 void check(TreeNode* root) { if(root == nullptr) return; check(root->left); result.push_back(root->val); check(root->right); } bool checkBST(TreeNode* root) { if(root == nullptr) return false; if(root && !root->left && !root->right) return true; check(root); //判断中序遍历结果是否有序 int len = result.size(); for(int i = 1; i < len; ++i){ if(result[i-1] >= result[i]) return false; } return true; }};
方法二
根据二叉查找树的定义来判断,二叉查找树所有左子树的节点小于根节点,所有右子树的节点大于根节点,并且左右子树也是二叉查找树。所以在递归的过程中,我们只需要传递两个参数(当前根节点对应的二叉树的所有节点的最大值和最小值),同时不断的更新这两个参数,如果当前节点的值不在这两个数范围中,则直接返回false,否则继续递归。
class Checker { public: bool checkBST(TreeNode* root) { return method2(root,INT_MIN,INT_MAX); } bool check(TreeNode* root,int min,int max) { if(root == NULL) return true; if(root->val < min || root->val > max) return false; return check(root->left, min, root->val) && check(root->right, root->val, max); } };
阅读全文
0 0
- 二叉查找树的判断
- 二叉查找树的判断
- 二叉查找树相关判断
- 判断二叉树是否二叉查找树
- 判断一个二叉树是不是合法的二分查找树
- 判断给定的二叉树是否为二分查找树
- 判断二叉查找树的合法性 Validate Binary Search Tree
- 【LeetCode】Validate Binary Search Tree 二叉查找树的判断
- 《程序员面试金典》--二叉查找树的判断
- 判断二叉查找树的三种方法
- 二叉树系列---判断给定的二叉树是否为二叉查找树
- 判断一颗树是否为二叉查找树
- 判断是否是二叉查找树
- 判断一棵树是否是二叉查找树
- leetcode笔记—判断查找二叉树
- 判断二叉查找树(面试题)
- 程序员面试经典--判断二叉查找树
- 判断一棵树是否是二叉查找树
- Android---SmartImageView和AsyncHttpClient的应用之《新闻客户端》案例
- JDK8 JVM 简单堆分配实验
- js插件开发规范
- IE下跨域出现No Transport
- 20170524-SQL数据输出转换,ResultSet,method
- 二叉查找树的判断
- STM32高级教程之USB HID双向数据传输
- 初始
- Android的IPC机制
- Phpcms V9内容页show模板调用标签一览
- opencv(29)---角点检测
- 【WPF】wpf笔记本
- Activity中 onResume和onPause与onStart()和onStop()的一些思考
- 补充 TOMcat 下目录的意义