第9题(树)
判断整数序列是不是二元查找树的后序遍历结果
题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。
如果是返回true,否则返回false。
例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:
8
/ /
6 10
/ / / /
5 7 9 11
因此返回true。
如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回false。
#include <iostream>
using namespace std;
struct BSTreeNode {
int data;
BSTreeNode * left;
BSTreeNode * right;
};
struct Stack {
int a[100];
int top;
public:
void initStack() {
this->top = 0;
}
};
void addStack (Stack & s,int value) {
s.a[s.top] = value;
s.top++;
}
void addNode (BSTreeNode * & root ,int data) {
if(root==NULL) {
BSTreeNode * p = new BSTreeNode;
p->data = data;
p->left = NULL;
p->right = NULL;
root = p;
}
else {
if(root->data<data) {
addNode(root->right,data);
}
if(root->data>data) {
addNode(root->left,data);
}
}
}
void lastSearch(BSTreeNode * root,Stack & ss) {
if(root->left !=NULL) lastSearch(root->left,ss);
if(root->right!=NULL) lastSearch(root->right,ss);
addStack(ss,root->data);
cout<<root->data<<endl;
}
int main() {
int flag = 1;
BSTreeNode * root = NULL;
addNode(root,8);
addNode(root,10);
addNode(root,5);
addNode(root,6);
addNode(root,7);
addNode(root,9);
addNode(root,11);
Stack s;
s.initStack();
cout<<s.top<<endl;
lastSearch(root,s);
int aa[7] = {7,6,5,9,11,10,8};
for(int i=0;i<s.top;i++) {
if(s.a[i]!=aa[i]) {
flag = 0;
break;
}
}
if(flag==0) cout<<"false"<<endl;
if(flag==1) cout<<"true"<<endl;
}