面试训练排序二叉树
来源:互联网 发布:游戏策划 美工 强奸 编辑:程序博客网 时间:2024/06/15 00:11
思路呢 就是利用后序遍历的性质吧
1 数组最后一个元素为根元素,左边都为 左子树和右子树节点。
2 根据数组的根结点以及搜索二叉树的性质,左边小 右边大 ,那么遍历左边的数组元素 找到第一个大于该元素的节点为右子树的节点
3 此时可以用递归解决问题咯
比如上题的过程如下
{5,7,6,9,11,10,8}
根节点 8
遍历 找到 9 为右子树的第一个节点
那么 可以 5 7 6为左子树 6 为左子树根结点 9 10 11 为右子树 其中11为右子树根结点
依次这么递归下去。
如何返回呢~我们知道后序遍历的性质吧,先左子树 后右子树 然后根,保证左子树的节点都小于,保证右子树的节点都大于根。那么依次这么细分 知道只剩下一个元素
代码如下
#include "stdio.h"int judgeSortTree(int *data,int start,int last){int ret =0;int index=0;int i =0;if(start >=last){ret=1;return ret;}for(index=start;index<last;index++){if(data[index]>data[last])break;}for(i=start;i<index;i++) /*当然左子树检测这一步可以省去,因为如果左子树中有元素大于根元素,其毕被分到右子树中,因此不需要判断也可以。*/{if(data[i]>data[last]){return 0;}}/*右子树必须大于根*/for(i=index;i<last;i++){if(data[i]<data[last]){return 0;}}return judgeSortTree(data,start,index-1)&&judgeSortTree(data,index,last-1);}int main(){int data[]={5,7,6,9,11,10,8}; /*yes*///int data[] ={7,4,6,5}; /*No*/int ret =0;int len= sizeof(data)/sizeof(data[0]);ret = judgeSortTree(data,0,len-1);if(ret ==1){printf("OK\n");}else{printf("No\n");}return 0;}
- 面试训练排序二叉树
- 面试训练判断二叉树是不是平衡
- 面试训练二叉树问题二
- 面试训练调整平衡二叉树
- 面试训练排序
- 面试训练从上而下打印二叉树
- 面试训练二叉搜索树建双向链表
- 面试训练烙饼排序实现
- 面试训练O(n)时间的排序
- 面试训练二叉树两结点的最低共同父结点
- 面试训练树的性质
- 二叉树 面试
- 二叉树--面试加分
- 二叉树 面试 JAVA
- 二叉树面试总结
- 二叉树面试
- 二叉树 面试题目
- 二叉树,排序二叉树
- c++的volatile用法
- Nginx源码完全注释(6)core/murmurhash
- 页面自动刷新
- 一本支持研究型教学的C语言教材
- rcp(插件开发) No schema found for the extension point
- 面试训练排序二叉树
- Mysql 日期格式函数介绍
- ora-01110错误之异常恢复
- 客户端请求编码POST/GET方式----RequestDispatcher----Cookie
- hdu4273Rescue三维凸包的重心
- java 泛型详解
- oracle创建表空间
- Assignment2_GraphicsHierarchy
- 关于C#中小数点都位数的控制(小数点后一位)