23二叉搜索树的后序遍历序列
1 //二叉搜索树的后序遍历序列 2 3 // 题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 4 // //* 5 6 // *首先知道什么是二叉搜索树? 7 // *即左子树结点的值都小于根节点,右子树结点的值都大于根节点。 8 // *然后再了解什么是后序遍历? 9 // *最后一个数字是树的根节点的值,数组的前半部分是左子树的值,他们都比根节点的值小; 10 // *第二部分是右子树结点的值,他们都比根节点的值大。 11 class Solution 12 { 13 public: 14 bool VerifySquenceOfBST(vector<int> sequence) 15 { 16 int length = sequence.size(); 17 if (length <= 0) 18 { 19 return false; 20 } 21 //先找到根节点 22 int root = sequence[length-1]; 23 //然后再求出左半部分 24 vector<int> left; 25 int i = 0; 26 for (; i < length-1; ++i) 27 { 28 if (sequence[i]>root) 29 { 30 break; 31 } 32 left.push_back(sequence[i]); 33 } 34 35 //然后再求出右半部分 36 int j = i; 37 vector<int> right; 38 for (; j < length-1; ++j) 39 { 40 if (sequence[j] < root ) 41 { 42 return false; 43 } 44 right.push_back(sequence[j]); 45 } 46 bool treeLeft = true; 47 if (i > 0) 48 { 49 treeLeft = VerifySquenceOfBST(left); 50 } 51 bool treeRight = true; 52 if(i < length-1) 53 { 54 treeRight = VerifySquenceOfBST(right); 55 } 56 return (treeLeft && treeRight); 57 } 58 };
在代码的世界尽情的翱翔吧!