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 };

 

posted @ 2017-08-21 17:31  繁星的夜空2012  阅读(131)  评论(0编辑  收藏  举报