二叉搜索树的后序遍历序列
Posted 三颗心
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉搜索树的后序遍历序列相关的知识,希望对你有一定的参考价值。
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
思路:需要遍历树,二叉排序树的特点是 lchild.key < root.key < rchild.key
那么我们使用分治思想,先利用上面特点将左右子树分开,遇到第一个大于root.key的之后(右边)就是右子树,那么当我们在遍历右子树的时候如果遇到小于root.key的情况,那么就是错误的序列。
1 #include "stdafx.h" 2 #include<stdio.h> 3 4 5 // BST:Binary Search Tree,二叉搜索树 6 bool VerifySquenceOfBST(int sequence[], int length) 7 { 8 if(sequence == NULL || length <= 0) 9 return false; 10 11 int root = sequence[length - 1]; 12 13 // 在二叉搜索树中左子树的结点小于根结点 14 int i = 0; 15 for(; i < length - 1; ++i) 16 { 17 if(sequence[i] > root) 18 break; 19 } 20 21 // 在二叉搜索树中右子树的结点大于根结点 22 int j = i ; 23 for(; j < length - 1; ++j) 24 { 25 if(sequence[j] < root) 26 return false; 27 } 28 29 // 判断左子树是不是二叉搜索树 30 bool left = true; 31 if(i > 0) 32 left = VerifySquenceOfBST(sequence, i); 33 34 // 判断右子树是不是二叉搜索树 35 bool right = true; 36 if(i < length - 1) 37 right = VerifySquenceOfBST(sequence + i , length - i - 1) ; 38 39 return (left && right); 40 } 41 42 43 int main() 44 { 45 46 //test1 47 // 10 48 // / \\ 49 // 6 14 50 // /\\ /\\ 51 // 4 8 12 16 52 int data1[] = {4, 8, 6, 12, 16, 14, 10}; 53 int length1 = sizeof(data1) / sizeof(int); 54 printf("test1: "); 55 if(VerifySquenceOfBST(data1, length1)) 56 printf("Yes\\n"); 57 else 58 printf("No\\n"); 59 60 //test2 61 // 5 62 // / 63 // 4 64 // / 65 // 3 66 // / 67 // 2 68 // / 69 // 1 70 71 int data2[] = {5, 4, 3, 2, 1}; 72 int length2 = sizeof(data2)/sizeof(int); 73 printf("test2: "); 74 if(VerifySquenceOfBST(data2, length2)) 75 printf("Yes\\n"); 76 else 77 printf("No\\n"); 78 79 //test3 80 // 5 81 // / \\ 82 // 4 7 83 // / 84 // 6 85 86 int data3[] = {4, 6, 7, 5}; 87 int length3 = sizeof(data3)/sizeof(int); 88 printf("test3: "); 89 if(VerifySquenceOfBST(data3, length3)) 90 printf("Yes\\n"); 91 else 92 printf("No\\n"); 93 94 //test4 95 // NULL 96 97 printf("test4: "); 98 if(VerifySquenceOfBST(NULL, 0)) 99 printf("Yes\\n"); 100 else 101 printf("No\\n"); 102 103 return 0; 104 }
以上是关于二叉搜索树的后序遍历序列的主要内容,如果未能解决你的问题,请参考以下文章