2020-05-12

1.题目描述

二叉搜索树迭代器

2.题解

对于二叉搜索树而言,进行中序遍历就可以得到其有序序列,我们可以先对树进行遍历,将结果保存在
vector中,然后进行计算即可。

3.代码

173

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class BSTIterator {public:BSTIterator(TreeNode* root) {TreeNode* p=root;while (p||!mystack.empty()){while (p){mystack.push(p);p=p->left;}if (!mystack.empty()){myvector.push_back(mystack.top()->val);p=mystack.top();mystack.pop();p=p->right;}}index=0;}/** @return the next smallest number */int next() {return myvector[index++];}/** @return whether we have a next smallest number */bool hasNext() {if (index>=myvector.size()) return false;return true;}stack<TreeNode*> mystack;vector<int> myvector;int index;
};/*** Your BSTIterator object will be instantiated and called as such:* BSTIterator* obj = new BSTIterator(root);* int param_1 = obj->next();* bool param_2 = obj->hasNext();*/

94

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {public:vector<int> inorderTraversal(TreeNode* root) {vector<int> myvector;stack<TreeNode*> mystack;TreeNode* p=root;while (p||!mystack.empty()){while(p){mystack.push(p);p=p->left;}if (!mystack.empty()){p=mystack.top();mystack.pop();myvector.push_back(p->val);p=p->right;}}return myvector;}
};

145

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {public:vector<int> postorderTraversal(TreeNode* root) {vector<int> myvector;stack<TreeNode*> mystack;TreeNode* p=root;TreeNode* pre=p;while (p||!mystack.empty()){while (p){mystack.push(p);p=p->left;}TreeNode* top=mystack.top();if (!top->right||pre==top->right){myvector.push_back(top->val);mystack.pop();pre=top;}else{p=top->right;}}return myvector;}
};

98

一开始将pre设置成最小的int,没想到测试样例中竟然刚好出现了[-2147483648],只能使用long long
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {public:bool isValidBST(TreeNode* root) {// 对其进行中序遍历,看其是否是递增的即可if (!root) return true; // 根节点为空stack<TreeNode*> mystack;TreeNode* p=root;long long pre=(long long)INT_MIN-1; // 保留其中序遍历的上一个数,看是否满足递增的条件while (p||!mystack.empty()){while (p){mystack.push(p);p=p->left;}p=mystack.top();mystack.pop();if (p->val<=pre) return false;pre=p->val;p=p->right;}return true;}
};

173. 二叉搜索树迭代器/94. 二叉树的中序遍历/145. 二叉树的后序遍历/98. 验证二叉搜索树相关推荐

  1. Leetcode 98:验证二叉搜索树

    Leetcode 98:验证二叉搜索树 题目描述 我的解法:非递归的中序遍历 其它解法1:非递归的中序遍历,用LONG_MIN规避树的val等于INT_MIN的情况 其他解法2:递归的中序遍历思想 其 ...

  2. 【LeetCode】【HOT】98. 验证二叉搜索树(递归)

    [LeetCode][HOT]98. 验证二叉搜索树 文章目录 [LeetCode][HOT]98. 验证二叉搜索树 package hot;class TreeNode{int val;TreeNo ...

  3. 二叉树前序遍历python输出_[宜配屋]听图阁 - Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例...

    本文实例讲述了Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作.分享给大家供大家参考,具体如下: 实现一个功能: 输入:一颗二叉树的先序和中序遍历 输出:后续遍历 思想: 先序遍历中,第 ...

  4. 已知满二叉树先序序列存在于数组中,设计算法将其变成后序序列

    解题思路: 满二叉树:除最后一层无任何子结点外,每一层上的所有结点都有两个以上的结点 先序序列:DLR 后序序列:LRD 先从最简单的满二叉树开始: 1.只有一个结点的满二叉树 2.有三个结点的满二叉 ...

  5. LeetCode 98验证二叉搜素树(中序遍历)99恢复二叉搜索树

    微信搜一搜:bigsai 大家都在关注的刷题.学习数据结构和算法宝藏项目 关注回复进群即可加入力扣打卡群,欢迎划水.近期打卡: LeetCode 92反转链表Ⅱ&93复制ip地址&94 ...

  6. leetcode 98. 验证二叉搜索树 递归遍历左右子树和中序遍历 c语言解法

    如题: 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右子树自身必须也是 ...

  7. 98.验证二叉搜索树

    给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树. 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数. 节点的右子树只包含 大于 当前节点的数. 所有左子树和右子 ...

  8. leetcode —— 98. 验证二叉搜索树

    给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右子树自身必须也是二叉搜索 ...

  9. leetcode系列-98.验证二叉搜索树

    题目描述:给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树.有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数. 节点的右子树只包含 大于 当前节点的数. 所有左子树 ...

最新文章

  1. linux文件系统dentry_NFS 文件系统源代码剖析
  2. unity3d 数学基础与数学辅助类
  3. 用Java编写第一个区块链(二)
  4. [python爬虫] Selenium高级篇之窗口移动、弹出对话框自登录
  5. [NOIP2014] 寻找道路
  6. 若依使用undertow来替代tomcat容器
  7. SQL Server数据库迁移最佳实践,可降低风险和停机时间
  8. 靠近阿里云--视频点播
  9. 蓝桥 PREV-34 历届试题 矩阵翻硬币
  10. Linux启动分析——init进程与app启动(init进程源码分析)
  11. [转贴] 刷机利器 Rom Manager 的简单用法
  12. android天气预报开题报告,开题报告-基于Android手机移动天气预报系统.doc
  13. 教你炒股票28:回复(一)
  14. 在 QNAP(威联通)NAS 上自动查找和删除 重复文件 的方法
  15. C语言:memcmp()。
  16. 工控硬件芯片级电路板维修方法
  17. Ubuntu20.04 系统搭建 NetBox(开源 IPAM/DC 管理工具)
  18. Ubound Lbound,数组上下边界 将二维数组处理后写入新数组,并粘贴到单元格中。
  19. 在向XSLFTable中填充内容时出现xmlvaluedisconnectedException的错误
  20. BGP边界网关路由协议

热门文章

  1. 值得思考,机器学习模型做出的决策是你想要的吗?
  2. R包ggseqlogo |绘制序列分析图
  3. 珍惜时间, 珍惜生命
  4. NOI数学:莫比乌斯变换
  5. 【NOI2022】PV「什么是信息学精神?」
  6. 1.4编程基础之逻辑表达式与条件分支 07 收集瓶盖赢大奖
  7. laravel 执行php命令报错PHP Parse error: syntax error, unexpected '=' in的解决方式
  8. css中如何实现帧布局_?如何在Python中加入多个数据帧?
  9. 【ES8(2017)】async / await
  10. Qt工作笔记-主界面往模式对话框emit信号,有注意的问题