首页 > 编程知识 正文

具有n个结点的二叉树采用二叉链表存储,采用二叉树链表作为存储结构,完成二叉树的建立

时间:2023-05-05 00:26:21 阅读:159134 作者:1391

Description知道一棵二叉树的前序序列和中序序列分别存放在两个一维数组中,并试制算法来建立这个二叉树的链表。

Input分两行分别输入1棵二叉树的前序序列和中序序列。

Output输出这个二叉树的后序列。

sampleinputabdfgcehbfdgacehsampleoutputfgdbheca

# include stdio.h # include stdlib.htypedefstructbtnode { chardata; struct BTNode *lchild; struct BTNode *rchild; }BTNode; char pre[100],mid[100]; int len; void init () {int i; char s; for(I=0; i 100; I ) {pre[i]='# '; mid[i]='# '; (I=0; wile(Scanf('%c ',s ) s!='n ' ) {pre[i]=s; I; (I=0; wile(Scanf('%c ',s ) s!='n ' ) {mid[i]=s; I; (I=0; wile(pre[I]!='# ' ) { i; (} len=i; } Bt node * createnode (int pre _ start,int pre_end,int mid_start,int mid_end ) {int i,LLen,RLen; Btnode*root=(Btnode* ) malloc ) sizeof ) Btnode ); root-data=pre[pre_start]; 根- lchild=空; 根- rchild=空; i=mid_start; wile (根-数据!=mid[I](I; LLen=i - mid_start; RLen=mid_end - i; if(llen ) root-lchild=createnode (pre _ start 1,pre_start LLen,mid_start,i-1 ); }if(rlen ) root-rchild=createnode (pre _ start llen 1,pre_end,i 1,mid_end ); }return root; }voidprintftree(Btnode*root ) if ) root-lchild ) printftree ) root-lchild ); 根字符(if )打印树(root-rchild ); printf('%c ',root-data ); }int main () Btnode*root=) Btnode* ) malloc ) sizeof ) Btnode ); init (; root=createnode(0,len-1,0,len-1 ); 打印树(root ); 返回0; )题解:前序和中序可以确定唯一二叉树,后序和中序可以确定唯一二叉树,前序和后序不能确定唯一二叉树。 找到顺序的第一个元素a和根节点,找到其元素对应于中顺序序列中的A1,A1的左侧是根节点左边部分树的所有元素,A1的右侧是根节点右边部分树的所有元素。 这样,找到所有根节点。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。