设二叉树 T,用二叉链表结构存储。编写函数,输出最长一枝(根到叶子)上的所有结点值。要求先给出算法思想,再写出相应代码。
算法思想:将头结点摘下,重新构造单链表,指针p保存剩下链表的第一个结点的地址,指针temp指向当前需要进行插入的结点,指针pre是新插入结点的前驱结点,依次将temp所指向的结点插入到L中,直到p==NULL结束。
typedef struct LNode{ Elemtype data; struct LNode *next; }LNode,*LinkList; void Insert(LinkList &L) { LNode *p=L->next;//用于遍历所有结点 L->next=NULL;//重新构造链表 LNode *pre=L,*temp=NULL;//pre指针指向奇数列最后一个 int i=1;//用于确定奇偶数 while(p!=NULL) { temp=p; p=p->next; temp->next=pre->next; pre->next=temp; if(i%2==1)//插入的是奇数结点 pre=temp;//将pre指向奇数列最后一个结点 i++; } }