• 题目:判断一颗二叉树是否为BST。
  • 思路:其实这个问题可以有多个解决方法。
  • 方法一:递归解决。根据BST的特性。左边的小于根节点的值,右边的大于根节点的值。并且对于每一棵子树都是如此。所以我们可以直接递归的对左右子树的值与根节点的值进行比较。左子树的值小于当前根节点的值,将当前根节点的值作为最大值传入左子树,左子树的值都小于他,递归处理;右子树的值都大于根节点的值,将根节点的值作为最小值传入右子树,右子树的值都大于他。
  • 代码:
    /*** Definition for binary tree* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
    class Solution {
    public:bool isValidBST(TreeNode *root) {return isValidBST(root, INT_MIN, INT_MAX);}bool isValidBST(TreeNode *root, int low, int high){if (root == NULL )return true;if (low < root->val && root->val < high)return (isValidBST(root->left, low, root->val) && isValidBST(root->right, root->val, high));elsereturn false;}
    };

  • 方法二:因为BST特性,所以我们可以利用遍历方法对他进行解决。对树进行中序遍历,将结果存储在vector中,如果容器中的值是递增排序的,那么它就是BST,否则就不是。
  • 代码:
    /*** Definition for binary tree* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
    class Solution {
    public:bool isValidBST(TreeNode *root) {vector<int> res;isValidBST(root, res);int len = res.size();bool flag = true;for (int i=0; i<len-1; i++){if (res[i] >= res[i+1]){flag = false;break;}}return flag;}void isValidBST(TreeNode *root, vector<int> &res){if (root == NULL)return;isValidBST(root->left, res);res.push_back(root->val);isValidBST(root->right, res);}
    };

转载于:https://www.cnblogs.com/Kobe10/p/6357950.html

(树)判断二叉树是否为BST相关推荐

  1. 树、二叉树、二叉搜索树_检查二叉树是否为BST(二叉搜索树)

    树.二叉树.二叉搜索树 Description: 描述: This article describes how to check whether a given tree is BST or not? ...

  2. 判断二叉树是否能成为折半查找判定树

    判断二叉树是否能成为折半查找判定树 如下题 分别给其编上序号,(注意该二叉树中序遍历为有序数列(前提)) 对于B 对于C: 1和4:(1+4)/2向下取整为2,而3和4:(3+4)/2向下取整为3,当 ...

  3. 数据结构之树和二叉树的应用:二叉排序树(BST)

    树和二叉树的应用:二叉排序树 思维导图: 二叉排序树的定义: 二叉排序树节点结构: 二叉排序树的查找: 二叉排序树的插入: 二叉排序树的构造: 二叉排序树的删除: 二叉排序树先删除再插入某个相同值的节 ...

  4. c++编写算法判断二叉树是否为完全二叉树_[校招-算法题] 二叉树基础算法1

    二叉树是面试中常考的数据结构,因为涉及大量指针操作,因此可以考察思维的严谨性和灵活性.但是校招中的二叉树题规律性很强,因此需要总结一下. 各种常见的二叉树概念 二叉树:每个结点最多有两个子树(左子树和 ...

  5. 有十五个数按由大到小顺序存放在一个数组中_数据结构基础 (代码效率优化, 线性表, 栈, 队列, 数组,字符串,树和二叉树,哈希表)...

    作者:张人大 代码效率优化 复杂度 -- 一个关于输入数据量n的函数 时间复杂度 -- 昂贵 与代码的结构设计有着紧密关系 一个顺序结构的代码,时间复杂度是O(1), 即任务与算例个数 n 无关 空间 ...

  6. b+树时间复杂度_数据结构:线性表,栈,队列,数组,字符串,树和二叉树,哈希表...

    作者:张人大 代码效率优化 复杂度 -- 一个关于输入数据量n的函数 时间复杂度 -- 昂贵 与代码的结构设计有着紧密关系 一个顺序结构的代码,时间复杂度是O(1), 即任务与算例个数 n 无关 空间 ...

  7. 【algods】4.树和二叉树、完全二叉树、满二叉树、二叉查找树、平衡二叉树、堆、哈夫曼树、散列表...

    本博客内容耗时4天整理,如果需要转载,请注明出处,谢谢. 1.树 1.1树的定义 在计算机科学中,树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结 ...

  8. 《王道》数据结构之树和二叉树(五)

    数据结构入门之树和二叉树(五) 大纲 一.树的概念和性质 1.1 树的概念 1.1.1 树的定义 1.1.2 结点分类与结点间关系 1.1.3 树的其他相关概念 1.2 (非空)树的性质 1.3 树的 ...

  9. 【数据结构Note5】- 树和二叉树(知识点超细大全-涵盖常见算法 排序二叉树 线索二叉树 平衡二叉树 哈夫曼树)

    文章目录 5.1 树和二叉树引入 5.1.1 树的概念 5.1.2 树的表示 5.1.3 树中基本术语 5.2 二叉树 5.2.1 概念 5.2.2 二叉树的性质 5.2.3 特殊的二叉树 5.2.4 ...

最新文章

  1. Serverless 技术选型
  2. 腾讯面经 | 数据从业者的一次“典型”面试
  3. spring boot部署war包打包插件配置
  4. 开源人员任务分配_开源财富分配是否公平?
  5. 《魔兽世界插件》教程---21点扑克游戏 Blackjack
  6. Bootstrap+Angularjs自制弹框
  7. 持续提高安卓应用安全性与性能
  8. Windows下同步工具FastCopy
  9. idea 去掉author波浪线
  10. 微信圣诞帽:OpenCV 库Linux下c++实现
  11. 触摸屏——S5PV210的触摸屏的理论与操作
  12. 创业,你踩过哪些坑?
  13. [破解]天草初级笔记
  14. 十张图深度剖析供应链金融业务模式
  15. Unity Shader:Unity网格(1)---顶点,三角形朝向,法线,uv,以及双面渲染三角形
  16. 专业软件测试工程师必备之软件测试要学什么技能?
  17. 北邮自考《C++程序设计》实践考试,你猜监考小姐姐说了什么?
  18. 技术英语单词中英文对照
  19. DMI指标又叫动向指标或趋向指标
  20. 双系统装完只能u盘启动_双系统引导失败如何修复教程?用NTBootAutofix一键修复...

热门文章

  1. PHPCMS V9 框架代码分析(入口程序)
  2. FilterDispatcher is deprecated! Please use
  3. 在Linux上编译安装php开发环境(install mysql5.6)-3
  4. 2014/12/05 随笔 2014-12-05 12:50 26人阅读 评论(0) 收藏...
  5. Terminal Services将改名为RDS
  6. hadoop/hive/hbase 简单区别及应用场景
  7. Node.js之readline模块的使用
  8. mysql str_to_date 字符串转换为日期
  9. ubuntu将mysql、nginx添加到环境变量中
  10. 阿里云ECS主机自定义进程监控