刷题笔记(1) 一个序列是否为二叉搜索树的遍历结果
1.输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
二叉搜索树:具体定义:https://blog.csdn.net/zj1131190425/article/details/88654541
是一棵二叉树,可能为空,非空的二叉搜索树满足以下特征:
1.每个元素都有唯一的关键字
2.根节点的左子树中,元素的关键字都小于根节点的关键字
3.根节点的右子树中,元素的关键字都大于根节点的关键字
4.根节点左右子树也都是二叉搜索树
根据二叉搜索树的定义来做:
class Solution { public: bool VerifySquenceOfBST(vector<int> sequence) { int size = sequence.size(); if(size==0) return false; vector<int> left; // 左子树 vector<int> right; // 右子树 int root = sequence[size-1]; // 根节点 int i; // 寻找左右子树的分界点 for(i=0; i<size-1; i++) { if(sequence[i]>root) { break; // 找到左右分解 } } for(int j=i; j<size-1; j++) { if(sequence[j]<root) return false; } if(i!=0) // 有左子树 { for(int j=0; j<i; j++) { left.push_back(sequence[j]); } } if(i!=size-1-1) // 有右子树 { for(int j=i; j<size-1; j++) { right.push_back(sequence[j]); } } if(left.size()>1) VerifySquenceOfBST(left); if(right.size()>1) VerifySquenceOfBST(right); return true; } };
这道题目利用递归的方法解题:
链接:https://www.nowcoder.com/questionTerminal/a861533d45854474ac791d90e447bafd
来源:牛客网
1、确定root;
2、遍历序列(除去root结点),找到第一个大于root的位置,则该位置左边为左子树,右边为右子树;
3、遍历右子树,若发现有小于root的值,则直接返回false;
4、分别判断左子树和右子树是否仍是二叉搜索树(即递归步骤1、2、3)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)