剑指offer-24:搜索二叉树的后序遍历
来源:互联网 发布:eclipse json编辑器 编辑:程序博客网 时间:2024/06/04 19:47
给定一个序列,判断是否是某二叉搜索树的后续遍历序列?
分析:
- 二叉搜索树,特点是一棵二叉树,左子树的结点值均小于根结点值,右子树的结点值均大于根结点值。查找时,和根结点比较,从而转向搜索左或右子树,类似于二分查找。
- 后续遍历是左-右-根。则最后一个数字为根结点值。前面小于根的为左子树,大于根的为右子树,递归仍符合该性质。
代码:
// offer-24-houxubianli.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>using namespace std;bool verity(int * a, int length){ if(a == nullptr || length <= 0) return false; // 当遇到一个结点时返回真 if(length == 1) return true; int root = a[length - 1]; // 找到左子树序列 int i = 0; for(; i < length-1; ++i) { if(a[i] > root) break; } // 剩下的为右子树,遍历若有小于根的,直接返回假 int j = i; for(; j < length-1; ++j) { if(a[j] < root) return false; } // 跑到这里说明根结点一层符合,需要看左右子树 // 当i=0即左子树为空时,返回真 // 否则递归处理左子树 bool left = true; if(i>0) left = verity(a, i); // 当j=length-1即右子树为空,返回真 // 否则递归处理右子树 bool right = true; if(j<length-1) right = verity(a+i, length-i-1); // 返回左右子树的并 return left && right;}// 测试int _tmain(int argc, _TCHAR* argv[]){ int a[] = {5,7,6,9,11,10,8}; cout << verity(a, 7) << endl; // true int b[] = {8,5,6,8,7}; cout << verity(b, 5) << endl; // false return 0;}
阅读全文
0 0
- 剑指offer-24:搜索二叉树的后序遍历
- 剑指offer:二叉搜索树的后序遍历序列
- 【剑指offer】二叉搜索树的后序遍历序列
- 剑指offer--二叉搜索树的后序遍历序列
- 剑指Offer-->二叉搜索树的后序遍历序列
- 《剑指offer》二叉搜索树的后序遍历序列
- 【剑指Offer】二叉搜索树的后序遍历序列
- 剑指offer--二叉搜索树的后序遍历序列
- 剑指 offer:二叉搜索树的后序遍历序列
- 剑指offer:二叉搜索树的后序遍历序列
- 【剑指offer】二叉搜索树的后序遍历序列
- 二叉搜索树的后序遍历序列||剑指offer
- 剑指offer-二叉搜索树的后序遍历序列
- 剑指offer 二叉搜索树的后序遍历序列
- 剑指offer 二叉搜索树的后序遍历序列
- 剑指offer:二叉搜索树的后序遍历序列
- [剑指offer]二叉搜索树的后序遍历序列
- 《剑指offer》-二叉搜索树的后序遍历序列
- 我又把HTMLTestRunner改了一下,支持Python3,添加echarts统计饼图
- javascript打印时的css样式的控制
- [转]AutoEncoder原理
- python自然语言处理学习笔记2——基础语句
- BZOJ 3036 浅谈逆拓扑序递推期望转移方程
- 剑指offer-24:搜索二叉树的后序遍历
- 分析HashSet,HashMap源码,如何保证HashSet集合元素唯一性。
- mybatis generator
- 2章 信息的表示和处理
- Android Studio中引用Module依赖注意事项
- JS
- Leaflet 官方教程-Non-geographical maps 非地理地图
- [转]JLink重刷固件(win7/win8/win10亲测可用)
- javascript模拟面向对象程序设计编程(二)