标签:preorder int 前序 dfs lintcode1307 stack 树中 order left
验证二叉搜索树中的前序序列
题目:验证二叉搜索树中的前序序列
给定一组数字,验证它是否是二叉搜索树的正确的前序遍历序列。
示例1:
输入: preorder = [1,3,2]
输出: true
示例2:
输入:preorder=[4,2,1,3,6,5,7]
输出:true
题解
方法1:分治法
public class Solution {
private int[] order;
public boolean dfs(int left, int right, int min, int max)
{
if(left>right) return true;
for(int i=left;i<=right;i++)
{
if(order[i]>max || order[i]<min) return false;
}
int i;
for(i=left+1;i<=right;i++)
{
if(order[i]>order[left]){
break;
}
}
return dfs(left+1, i-1, min, order[left])&&dfs(i, right, order[left], max);
}
public boolean verifyPreorder(int[] preorder) {
order=preorder;
int i;
for(i=1;i<order.length;i++)
{
if(order[i]>order[0]){
break;
}
}
return dfs(1, i-1, Integer.MIN_VALUE, order[0])&& dfs(i, order.length-1, order[0], Integer.MAX_VALUE);
}
}
方法2:
左子树:小于根节点
右子树:大于根节点
利用栈,寻找当前节点的根节点
public class Solution1 {
public boolean verifyPreorder(int[] preorder) {
int min=Integer.MIN_VALUE;
Stack<Integer> stack=new Stack<>();
for (int p : preorder) {
if(p< min) return false;
while (!stack.empty() && p>stack.peek())
{
min=stack.pop();
}
stack.push(p);
}
return true;
}
}
标签:preorder,int,前序,dfs,lintcode1307,stack,树中,order,left 来源: https://www.cnblogs.com/greengages/p/15766422.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。