歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 判斷整數序列是不是二元查找樹的後序遍歷結果

判斷整數序列是不是二元查找樹的後序遍歷結果

日期:2017/3/1 9:17:02   编辑:Linux編程

題目:輸入一個整數數組,判斷該數組是不是某二元查找樹的後序遍歷的結果。
如果是返回 true,否則返回 false。
例如輸入 5、7、6、9、11、10、8,由於這一整數序列是如下樹的後序遍歷結果:
8
/ \
6 10
/ \ / \
5 7 9 11
因此返回 true。
如果輸入 7、4、6、5,沒有哪棵樹的後序遍歷的結果是這個序列,因此返回 false。
代碼思路:
後序遍歷為左右根。以5、7、6、9、11、10、8為例。8為根,然後找出5、7、6為左子樹,9、11、10為右子樹。然後進行分別遞歸。
代碼(C++實現),本來用數組可以更容易完成,以下代碼是為了復習c++中vector的操作。
采用三種數據
#include
#include
bool judge(std::vector a,int start,int end)
{
if (start < end)
{
int left = start;
while (a[left] < a[end])
{
left++;
}
int right = left;
while (right < end)
{
if (a[right] < a[end])
{
return 0;
}
right++;
}
judge(a, 0, left-1);
judge(a, left,end-1);
}
return 1;
}
void main()
{
std::vector a;
std::cout << "請輸入後序遍歷的數字個數" << std::endl;
int num = 0;
std::cin >> num;
for (int i = 0; i < num; i++)
{
int tmp;
std::cout << "請輸入數字" << std::endl;
std::cin >> tmp;
a.push_back(tmp);
}
std::vector::iterator it;
for (it = a.begin(); it != a.end(); it++)
{
std::cout << *it << " ";
}
if (judge(a,0,num-1)==1)
{
std::cout << "TRUE" << std::endl;
}
else
{
std::cout << "FALSE" << std::endl;
}
system("pause");
}

Copyright © Linux教程網 All Rights Reserved