文章524
标签277
分类67

算法:二叉搜索树的后序遍历序列


二叉搜索树的后序遍历序列

二叉搜索树的后序遍历序列

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。

假设输入的数组的任意两个数字都互不相同。


分析

由于是二叉搜索树, 而且是后序遍历, 所以一定有:

  • arr[end]就是当前子树的根节点

  • 左子树arr[i] < arr[end]

  • 右子树arr[i] > arr[end]

    所以类似于快排, 对于二叉树的子树进行递归, 并拆分左右子树, 判断上面的规则;


代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if (sequence == null || sequence.length == 0) return false;
return isBST(sequence, 0, sequence.length - 1);
}

private boolean isBST(int[] arr, int start, int end) {
// 问题边界
if (end <= start) return true;
// end为当前树的根, pivot为BST的左右分隔节点;
int pivot = start;
// 左侧都小于arr[end]
for (; pivot < end; ++pivot) {
if (arr[pivot] > arr[end]) break;
}
// 右侧都大于arr[end]
for (int j = pivot; j < end; ++j) {
if (arr[j] < arr[end]) return false;
}
return isBST(arr, start, pivot - 1) && isBST(arr, pivot, end - 1);
}
}

本文作者:Jasonkay
本文链接:https://jasonkayzk.github.io/cn/1996/07/27/%E7%AE%97%E6%B3%95-%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E7%9A%84%E5%90%8E%E5%BA%8F%E9%81%8D%E5%8E%86%E5%BA%8F%E5%88%97/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可