标签:style blog color os io strong for 问题
在后续遍历得到的序列中,最后一个元素为树的根结点。根节点元素将数组分为两部分,左边都小于根节点,右边都大于根节点。递归的确认左右是否是二元查找树即可。
代码实现:
1 // 9.cc 2 #include <iostream> 3 using namespace std; 4 5 bool verify(int* a, int size) { 6 if (NULL == a || size <= 0) 7 return false; 8 9 int root = a[size - 1]; 10 11 // 左侧节点比根节点小 12 int i = 0; 13 while (i < size - 1 && a[i] <= root) 14 i++; 15 16 // 右侧节点比根节点大 17 for(int j = i; j < size - 1; j++) { 18 if(a[j] < root) 19 return false; 20 } 21 22 // 分别验证左右子树 23 bool left = true; 24 if(i > 0) 25 left = verify(a, i); 26 27 bool right = true; 28 if(i < size - 1) 29 right = verify(a + i, size - i - 1); 30 31 return (left && right); 32 } 33 34 int main() { 35 int a[] = {4, 8, 6, 12, 16, 14, 10}; 36 int size = sizeof(a) / sizeof(int); 37 bool flag = verify(a, size); 38 cout << flag << endl; 39 return 0; 40 }
IT公司100题-9-判断整数序列是不是二元查找树的后序遍历结果,布布扣,bubuko.com
IT公司100题-9-判断整数序列是不是二元查找树的后序遍历结果
标签:style blog color os io strong for 问题
原文地址:http://www.cnblogs.com/dracohan/p/3898623.html