标签:add ali div node turn highlight 验证 bec new
#include <bits/stdc++.h> using namespace std; const int N = 100010; int pre[N], in[N], post[N]; //先序、中序、后序 int k; struct node{ int value; node *l, *r; //node(int value = 0, node *l = NULL, node *r = NULL):value(value), l(l), r(r){} }; //void buildtree(int l, int r, int &t, node* &root) { //建树 // int flag = -1; // for(int i = l; i <= r; i++) //先序的第一个是根,找到对应的中序的位置 // if(in[i] == pre[t]){ // flag = i; break; // } // if(flag == -1) return; //结束 // root = new node(in[flag]); //新建结点 // t++; // if(flag > l) buildtree(l, flag - 1, t, root ->l); // if(flag < r) buildtree(flag + 1, r, t, root ->r); //} void add(node * &root ,int & t ){ if(root == NULL){ root = new node; root->value=t; root->l=root->r=NULL; }else{ if( t > root->value) add( root->r,t); else add(root->l,t); } } void preorder (node *root){ //求先序序列 if(root != NULL){ post[k++] = root ->value; //输出 preorder (root ->l); preorder (root ->r); } } void inorder (node *root){ //求中序序列 if(root != NULL){ inorder (root ->l); post[k++] = root ->value; //输出 inorder (root ->r); } } void postorder (node *root){ //求后序序列 if( root != NULL){ postorder (root ->l); postorder (root ->r); post[k++] = root ->value; //输出 } } void remove_tree(node *root){ //释放空间 if(root == NULL) return; remove_tree(root->l); remove_tree(root->r); delete root; } int main(){ int n; while(~scanf("%d", &n)){ node *root=NULL; int x; for(int i=1;i<=n;i++){ scanf("%d", &x); add(root,x ); } k = 0; //记录结点个数 preorder(root); for(int i=0;i<k;i++) printf("%d%c",post[i], i==k-1? ‘\n‘ : ‘ ‘); //作为验证,这里可以用preorder()和inorder()检查先序和中序遍历 remove_tree(root); } return 0; }
标签:add ali div node turn highlight 验证 bec new
原文地址:https://www.cnblogs.com/lyj1/p/11518881.html