博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指offer——面试题24:二叉搜索树的后序遍历序列
阅读量:2254 次
发布时间:2019-05-09

本文共 1660 字,大约阅读时间需要 5 分钟。

剑指offer——面试题24:二叉搜索树的后序遍历序列

Solution1:

二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。

参考网址:

class Solution {public:    bool VerifySquenceOfBST(vector
sequence) { return bst(sequence,0,sequence.size()-1); } bool bst(vector
&sequence,int begin,int end){ //整型参数为vector下标 if(sequence.empty()||begin>end) return false; int root=sequence[end]; int i=begin; for(;i
root)//i坐标为右子树第一个节点 break; for(int j=i;j
begin) //若i==begin,则左子树为空,此时左子树为默认的true left=bst(sequence,begin,i-1); bool right=true; if(i

Solution2:

2018年9月1日重做

class Solution {public:    bool VerifySquenceOfBST(vector
sequence) { return bst(sequence, 0, sequence.size() - 1); } bool bst(vector
&sequence, int begin, int end) { //整型参数为vector下标 if (sequence.empty() || begin > end) return false; int root = sequence[end]; //根结点 int i = begin; //找到左右子树的分割点 for (; i < end; ++i) if(sequence[i] > root) //i坐标为右子树第一个节点 break; //右子树结点中若比根结点小 直接返回false for (int j = i; j < end; ++j) if(sequence[j] < root) return false; bool left = true; if (i > begin) //若i==begin,则左子树为空,此时左子树为默认的true left = bst(sequence, begin, i - 1); bool right = true; if(i < end - 1) //若i==end-1,则右子树为一个点,此时右子树为默认的true right = bst(sequence, i, end - 1); return left&&right; }};

转载地址:http://dxhdb.baihongyu.com/

你可能感兴趣的文章
glewInit初始化的错误
查看>>
OpenGL的库的安装
查看>>
拾取之名字栈
查看>>
github的使用
查看>>
python安装basemap【在地图上绘制2D数据】
查看>>
提取pdf文件中的文字
查看>>
决策树算法--ID3算法
查看>>
上传本地文件(夹)到GitHub和更新仓库文件
查看>>
决策树算法--C4.5算法
查看>>
linux kernal 代码汇总学习
查看>>
MDL
查看>>
ORALCE 之LRU链与脏LRU链
查看>>
linux中fork()函数详解
查看>>
生产者消费者问题
查看>>
平均值考虑溢出的问题
查看>>
反转链表
查看>>
如何计算一个整形数组里的连续元素和的最大值?
查看>>
关于硬链接和软连接(符号链接)的区别
查看>>
what’s a virtual destructor and when is it needed?
查看>>
链表操作
查看>>