三种建树方法
Posted foodie-nils
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三种建树方法相关的知识,希望对你有一定的参考价值。
前序中序序列建立二叉树:
//in[]和pre[]数组存放二叉树的中序和前序遍历序列 node* build(int preL,int preR,int inL,int inR){ if(preL>preR) return NULL; node* root=(node*)malloc(sizeof(node)); int val=pre[preL]; root->val=val; int x; for(int i=inL;i<=inR;i++){ if(in[i]==val){ x=i; break; } } x=x-inL; root->l=build(preL+1,preL+x,inL,inL+x-1); root->r=build(preL+1+x,preR,inL+x+1,inR); return root; }
后序中序序列建立二叉树:
//in[]和post[]数组存放二叉树的中序和后序遍历序列 node* build(int postL,int postR,int inL,int inR){ if(inL>inR) return NULL; node* root=(node*)malloc(sizeof(node)); root->val=post[postR]; int x; for(int i=inL;i<=inR;i++){ if(in[i]==root->val){ x=i; break; } } x=x-inL; //x表示左子树结点的个数 root->l=build(postL,postL+x-1,inL,inL+x-1); root->r=build(postL+x,postR-1,inL+x+1,inR); return root; }
以上是关于三种建树方法的主要内容,如果未能解决你的问题,请参考以下文章