173. 二叉搜索树迭代器/94. 二叉树的中序遍历/145. 二叉树的后序遍历/98. 验证二叉搜索树
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. 验证二叉搜索树相关推荐
- Leetcode 98:验证二叉搜索树
Leetcode 98:验证二叉搜索树 题目描述 我的解法:非递归的中序遍历 其它解法1:非递归的中序遍历,用LONG_MIN规避树的val等于INT_MIN的情况 其他解法2:递归的中序遍历思想 其 ...
- 【LeetCode】【HOT】98. 验证二叉搜索树(递归)
[LeetCode][HOT]98. 验证二叉搜索树 文章目录 [LeetCode][HOT]98. 验证二叉搜索树 package hot;class TreeNode{int val;TreeNo ...
- 二叉树前序遍历python输出_[宜配屋]听图阁 - Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例...
本文实例讲述了Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作.分享给大家供大家参考,具体如下: 实现一个功能: 输入:一颗二叉树的先序和中序遍历 输出:后续遍历 思想: 先序遍历中,第 ...
- 已知满二叉树先序序列存在于数组中,设计算法将其变成后序序列
解题思路: 满二叉树:除最后一层无任何子结点外,每一层上的所有结点都有两个以上的结点 先序序列:DLR 后序序列:LRD 先从最简单的满二叉树开始: 1.只有一个结点的满二叉树 2.有三个结点的满二叉 ...
- LeetCode 98验证二叉搜素树(中序遍历)99恢复二叉搜索树
微信搜一搜:bigsai 大家都在关注的刷题.学习数据结构和算法宝藏项目 关注回复进群即可加入力扣打卡群,欢迎划水.近期打卡: LeetCode 92反转链表Ⅱ&93复制ip地址&94 ...
- leetcode 98. 验证二叉搜索树 递归遍历左右子树和中序遍历 c语言解法
如题: 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右子树自身必须也是 ...
- 98.验证二叉搜索树
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树. 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数. 节点的右子树只包含 大于 当前节点的数. 所有左子树和右子 ...
- leetcode —— 98. 验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右子树自身必须也是二叉搜索 ...
- leetcode系列-98.验证二叉搜索树
题目描述:给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树.有效 二叉搜索树定义如下:节点的左子树只包含 小于 当前节点的数. 节点的右子树只包含 大于 当前节点的数. 所有左子树 ...
最新文章
- linux文件系统dentry_NFS 文件系统源代码剖析
- unity3d 数学基础与数学辅助类
- 用Java编写第一个区块链(二)
- [python爬虫] Selenium高级篇之窗口移动、弹出对话框自登录
- [NOIP2014] 寻找道路
- 若依使用undertow来替代tomcat容器
- SQL Server数据库迁移最佳实践,可降低风险和停机时间
- 靠近阿里云--视频点播
- 蓝桥 PREV-34 历届试题 矩阵翻硬币
- Linux启动分析——init进程与app启动(init进程源码分析)
- [转贴] 刷机利器 Rom Manager 的简单用法
- android天气预报开题报告,开题报告-基于Android手机移动天气预报系统.doc
- 教你炒股票28:回复(一)
- 在 QNAP(威联通)NAS 上自动查找和删除 重复文件 的方法
- C语言:memcmp()。
- 工控硬件芯片级电路板维修方法
- Ubuntu20.04 系统搭建 NetBox(开源 IPAM/DC 管理工具)
- Ubound Lbound,数组上下边界 将二维数组处理后写入新数组,并粘贴到单元格中。
- 在向XSLFTable中填充内容时出现xmlvaluedisconnectedException的错误
- BGP边界网关路由协议
热门文章
- 值得思考,机器学习模型做出的决策是你想要的吗?
- R包ggseqlogo |绘制序列分析图
- 珍惜时间, 珍惜生命
- NOI数学:莫比乌斯变换
- 【NOI2022】PV「什么是信息学精神?」
- 1.4编程基础之逻辑表达式与条件分支 07 收集瓶盖赢大奖
- laravel 执行php命令报错PHP Parse error: syntax error, unexpected '=' in的解决方式
- css中如何实现帧布局_?如何在Python中加入多个数据帧?
- 【ES8(2017)】async / await
- Qt工作笔记-主界面往模式对话框emit信号,有注意的问题