【剑指offer】【树】33.二叉搜索树的后续遍历序列
题目链接:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-hou-xu-bian-li-xu-lie-lcof/
递归
直接用二叉搜索树的后序遍历构建二叉树(利用二叉搜索树的性质,根节点的左子树都比他小,右子树都比他大),如果构建成功,返回true;否则,返回false;
后续遍历:左右根;
时间复杂度:O(n)
空间复杂度:O(n)
class Solution {
public:
bool verifyPostorder(vector<int>& postorder) {
return dfs(postorder, 0, postorder.size() - 1);
}
bool dfs(vector<int>& v, int l, int r)
{
if(l >= r) return true;
//根节点
int k = l;
//从左开始找,找到最后一个比根节点小的数,根节点的左子树
int root = v[r];
while(k < r && v[k] < root) k++;
//判断右子树的所有点是不是每个点都比根节点大
for(int i = k; i < r; i++)
if(v[i] < root) return false;
//递归处理左右两边
return dfs(v, l, k - 1) && dfs(v, k, r - 1);
}
};
知识的价值不在于占有,而在于使用

浙公网安备 33010602011771号