给定BST先序遍历序列,不构造BST的情况下判断BST是否每个node都只有一个child
2013-04-11 00:36
627 查看
// 给定BST先序遍历序列_判断BST是否每个node都只有一个child.cpp : Defines the entry point for the console application. // #include "stdafx.h" bool isOnlyHaveOneChild(int A[], int len) { for (int i = 0; i < len-1; i++) { if (A[i] < A[i+1]) { for (int j = i+1; j < len; j++) { if (A[j] < A[i]) { return false; } } } else { for (int k = i+1; k < len; k++) { if (A[k] > A[i]) { return false; } } } } return true; } int _tmain(int argc, _TCHAR* argv[]) { int A1[] = {16,10,8,9,29,27,22}; int A2[] = {10,19,17,14,15,16}; bool a1 = isOnlyHaveOneChild(A1, 7); bool a2 = isOnlyHaveOneChild(A2, 6); printf("%d, %d\n", a1,a2); return 0; }
上面的算法的时间复杂度为O(n^2), 原因是由左到右进行扫描,如果从右到左进行扫描,时间复杂度可以降为O(n)
bool isOnlyHaveOneChild2(int A[], int len) { if (A == NULL || len == 0) return false; if (len == 1) return true; int MinNum; int MaxNum; MinNum = MaxNum = A[len-1]; for (int idx = len-2; idx >=0; idx--) { if (A[idx] > MinNum && A[idx] < MaxNum) return false; if (A[idx] > MaxNum) MaxNum = A[idx]; else if (A[idx] < MinNum) MinNum = A[idx]; } return true; }
相关文章推荐
- 面试题精选(76):给定BST先序遍历序列,不构造BST的情况下判断BST是否每个node都只有一个child
- pat 判断给定插入序列是否为BST的先序遍历序列
- 面试题:给定一个长度为N的数组,其中每个元素的取值范围都是1到N。判断数组中是否有重复的数字
- 给定一个长度为N的数组,其中每个元素的取值范围都是1到N。判断数组中是否有重复的数字。(原数组不必保留)
- 【100题】给定入栈序列,判断一个序列是否可能为输出序列
- 判断给定序列是否为某BST后序输出
- 给定一个数组,判断这个数组的元素是否是在一个序列
- PAT (Advanced Level) 1043. Is It a Binary Search Tree (25) 判断序列是否为BST的先序遍历,递归
- 经典算法 | 给定n个矩形,判断这些矩形是否在不重合的情况下组成一个大矩形的算法
- 给定入栈顺序,输出所有可能的出栈情况,并判断给定的序列是否为正确的输出序列
- 判断一个数据序列是否是BST后序遍历的结果
- 判断给定的序列是否是一棵BST的后序遍历序列
- 判断一个序列是否是另一个给定序列的弹出序列
- 数据结构实验之图论十:判断给定图是否存在合法拓扑序列---bfs判断又向图的无环问题
- 图结构练习——判断给定图是否存在合法拓扑序列
- 图结构练习——判断给定图是否存在合法拓扑序列
- PHP - Manual手册 - XL. Filesystem 文件系统函数 - is_dir判断给定文件名是否是一个目录
- NSDate的一个分类,判断是否是今天,昨天,今年,获得与当前时间的差距,返回一个只有年月日的日期
- 给定一个字符串,判断该字符串中是否包含某个子串.如果包含, 求出子串的所有出现位置