二叉搜索树的前序遍历

来源:互联网 发布:中世纪2原版优化第十版 编辑:程序博客网 时间:2024/04/29 18:57

二叉搜索树:空树或者满足下列条件:

  • 若左子树不空,则左子树上所有结点的值都小于根节点。
  • 若右子树不空,则右子树上所有结点的值都大于根节点。

为了判断一个数组是否为一棵二叉搜索树的前序遍历,主要思想为:因前序遍历第一个遍历的是根节点,则数组第一个数为根节点的值,再基于根节点把整棵树的遍历序列分成左子树和右子树序列,递归的处理这两个子序列。

代码如下:

#include <iostream>#include <vector>using namespace std;bool IsBST(vector<int> a,int l,int r){    if(l>=r) return true; //若树为空树,或者到叶子节点     int i=r;    while(i>l&&a[i]>a[l]) --i;//从后开始遍历,找出右子树序列     for(int j=i;j>=l;--j)      if(a[j]>a[l]) return false;//若左子树有一个值大于根节点,则返回false.     return IsBST(a,l+1,i)&&IsDLR(a,i+1,r);//递归 }bool VerifySquenceOfBST(vector<int> sequence) {    if(sequence.empty()) return false;    return IsBST(sequence,0,sequence.size()-1);}int main(){    vector<int> vec={8,6,5,7,10,9,11};    cout<<VerifySquenceOfBST(vec)<<endl;}
0 0
原创粉丝点击