《交换二叉树中所有结点的左右子树》由会员分享,可在线阅读,更多相关《交换二叉树中所有结点的左右子树(2页珍藏版)》请在金锄头文库上搜索。
1、1. 实验目的:掌握二叉树的结构特性及各种存储结构的特点及适用范围;掌握用指针类型描述、访问和处理二叉树的运算2. 解题思路:以二叉链表作为存储结构,建立一颗二叉树,按层次遍历该二叉树,并实现二叉树中所有结点的左右子树交换,显示其结果。具体步骤:l 从键盘接受按层次遍历的顺序输入的结点,以“#”号结束l 将根结点进指针栈seqstackl 当指针栈不空时,从栈顶取结点,如果此结点的左右孩子不为空,则把其左右孩子交换,然后再分别将其交换后的左右孩子进栈反复执行上一步,直至指针栈为空时程序结束#include stdio.htypedef struct nodeint num;struct nod
2、e * next;linklist;linklist * create(int n)linklist * head,*s,*p;int i;s=(linklist *)malloc(sizeof(linklist);head=s;s-num=1;p=s;for(i=2;inum=i;p-next=s;p=s;p-next=head;return head;linklist * select(linklist * head,int m)linklist *p,*q;inti,t;p=head;t=1;q=p;dop=q-next;t=t+1;if(t=m)t=0;printf(%4d,p-num);q-next=p-next;free(p);elseq=p;while(p-next!=p);head=p;return(head);main()int n,m;linklist *head;printf(input the total numbern);sacnf(%d,&n);printf(input the number of call:n);sacnf(%d,&m);head=create(n);head=select (head,m);printf(the last one id %dn,head-num);