判断排序二叉树的后序遍历是否正确(对递归算的总结)
来源:互联网 发布:阿米巴软件 编辑:程序博客网 时间:2024/05/16 10:57
是
#include <iostream>using namespace std;//排序二叉树的性质/* *.终止条件:1.开始>=结尾返回真 *. 2.s >= e 因为不出现问题的话,一定能到达 s>=e的情况。知道到达了s >= e即为真 *. 1.最后一个节点是root 2.在root之前的节点 连续的大于root的是其右子树, 再之前连续小于root的是其左子树 3.递归调用 */ bool treehelper(int a[], int s, int e){if(a == NULL)return 0;if(s >= e)return 1; //在没有右子树的情况下,可能会出现s >= e int i = e-1;while( i >= s && a[e] <= a[i] )i--;if(!treehelper(a,i+1,e-1)){return 0;}int k = i;while( i >= s && a[e] > a[i])i--;if( s < i+1 )return 0;//如果左子树判断完还有大于root的值,直接说明这不是一颗排序二叉树的后序 return treehelper(a,s, k);}int PostorderResult(int a[], int n){ return treehelper(a,0,n-1);}int main(){int a[] = {1,5,7,6,9,11,10,8};int i = PostorderResult(a,sizeof(a)/sizeof(a[0]));cout <<i << std::endl;return 0;} //至于前序的更简单 遍历一下就行了。中序的话bool treehelper2(int a[], int s, int e){if( a == NULL)return NULL;if( s >= e)return 1;int i = s+1;while( i <= e && a[s] > a[i])i++;if(!treehelper2(a,s+1,i-1)){return 0;}int k = i;while( i <= e && a[s] <= a[i])i++;if( e > i-1 )return 0;return treehelper2(a,k,e); }
这里的递归是很经典的,我自己总结一下,不过总结的不咋点。。。
1.子问题
2.终止条件(包括一些边界)
子问题:每个后序判断都是划分成其左子树的后序一右子树的后序,然后左右子树可以递归下去。这就找到了子问题。
终止条件:当s>=e时,会出现s>=e只有不出问题的递归到每个子节点才有可能发生,当递归到这了,这个后序代表着是没有问题的。
总结的一般形式:
void func(int a, int b)//这里的参数都是控制子问题规模的参数
{
if(...)return ;//递归的终止条件
//下面是对当前这个问题进行解决,一般都会涉及到子问题
int i = func(a+x,b-x); //这个是对子问题的划分,也是控制子问题
int j = func(a-x,a+x); //
return i*j;//最后根据子问题返回的值,返回这整个问题的结果。
}
自娱自乐,轻喷!!
0 0
- 判断排序二叉树的后序遍历是否正确(对递归算的总结)
- 判断是否是二叉搜索树的后序遍历
- 判断是否为二叉搜索树的后序遍历
- 判断是否二叉搜索树的后序遍历
- 二叉搜索树的后序遍历序列序列判断是否是二叉搜索树
- 二叉树的后序递归,非递归遍历
- 剑指offer面试题24判断一个序列是否为BST的后序遍历序列附加输入递归的创建二叉树
- 判断一个后序遍历是否正确
- 判断给定的数组是否为二叉搜索树的后序遍历序列
- 判断给定数组是否是二叉树的前序或者后序遍历结果
- 判断一个数组是否是某个二叉树搜索树的后序遍历
- 树(4)判断某个序列是否是二叉查找树的后序遍历结果
- 判断一个数组是否为二叉树的后序遍历
- 判断整数序列是否为二叉查找树的后序遍历结果
- Interview----判断整数序列是否是二叉搜索树的后序遍历结果
- 输入一个数列,判断是否为某一个二叉搜索树的后序遍历序列
- 判断数组是否是搜索二叉树的后序遍历
- 判断一个序列是否是一个二叉查找树的后序遍历结果
- 叙利亚COC
- 维修电脑的基本原则
- linux常用命令 wc
- Android中StartActivityForResult的基本用法
- 电脑无法启动不断自动重启
- 判断排序二叉树的后序遍历是否正确(对递归算的总结)
- iOS8 定位新增功能
- WebView中TransactionTooLargeException异常
- Windows Workflow Foundation (WF)
- 调制解调器
- Android画图多线程环境下图形一会儿显示一会儿不显示问题
- 电脑为什么哗哗叫
- JUnit4 详解
- 现有IOS设备唯一标示符的方案比较