1086.Tree Traversals Again

来源:互联网 发布:中甲联赛数据统计 编辑:程序博客网 时间:2024/05/17 00:14
【题意】
        给出一个非递归输出二叉树中序遍历的方法,根据这种方法建立二叉树并输出此二叉树的后序遍历

【思路】
        找出利用栈输出中序遍历的规律即可建树:
            ·    push时若之前节点无左子树就插在之前节点的左子树上,否则插入右子树;
            ·    pop时要记录弹出的栈顶节点

        后序遍历递归实现即可



#include <iostream>#include <vector>#include <stack>#include <string>using namespace std;typedef struct node{int value;node *left;node *right;node(int v):value(v),left(NULL),right(NULL){};}BiNode;int cnt;void PostOrderTraversal(BiNode *node){if(node->left!=NULL){PostOrderTraversal(node->left);}if(node->right!=NULL){PostOrderTraversal(node->right);}cout << node->value;if(--cnt){cout << " ";}}int main(int argc, char const *argv[]){vector<BiNode> nodes;stack<BiNode*> ss;BiNode *tmp,*head;int n;cin >> n;tmp = NULL;for(int i=0; i<2*n; i++){string com;cin >> com;if(com=="Push"){int value;cin >> value;if(tmp==NULL){tmp = new BiNode(value);head = tmp;}else if(tmp->left==NULL){tmp->left = new BiNode(value);tmp = tmp->left;}else{tmp->right = new BiNode(value);tmp = tmp->right;}ss.push(tmp);}//Popelse{tmp = ss.top();ss.pop();}}cnt = n;PostOrderTraversal(head);system("pause");return 0;}

0 0
原创粉丝点击