建树遍历和删树都是从一个‘根’节点引入,因
#include<bits/stdc++.h> using namespace std; const int n=1000; 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 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) { postorder(root->l); postorder(root->r); post[k++]=root->value; } void remove_tree(node*root) { if(root==NULL) return ; else { remove_tree(root->l); remove_tree(root->r); delete(root); } } int main () { int n; while(~scanf("%d",&n)) { for(int i=1;i<=n;++i) { scanf("%d",&pre[i]); } for(int i=1;i<=n;++i) { scanf("%d",&pre[i]); } node *root; int t=1; buildtree(1,n,t,root); k=0; postorder(root); remove_tree(root); } return 0; }
为结构体互联所以从根节点向子节点扩张
二叉树建树遍历删树板子
最新推荐文章于 2024-02-13 19:54:24 发布