微软面试100之9 判断整数序列是不是二元查找树的后序遍历结果

来源:互联网 发布:淘宝怎么复制淘口令 编辑:程序博客网 时间:2024/05/16 14:09

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

}

原创粉丝点击