2012年5月23日

两个有序链表的合并

摘要: 思想: 1 LinkList * merge(LinkList* HeadA,LinkList* HeadB){ 2 LinkList* HeadC=NULL,*last=NULL; 3 while(HeadA!=NULL&&HeadB!=NULL){ 4 if(HeadA->data<HeadB->data) 5 { 6 if(HeadC==NULL) 7 HeadC=last=HeadA; 8 else 9 {10 last->next=HeadA;11 last=Head... 阅读全文

posted @ 2012-05-23 22:57 为梦飞翔 阅读(287) 评论(0) 推荐(0)

由一棵二叉树的先序序列和中序序列可唯一确定这棵二叉树

摘要: 思路:(1)由先序可以得到树的根节点。(2)由中序可以得到左右子树。(3)重复(1)(2)即可恢复同理给出后续和中序也可以按照上述思想唯一确定一棵树(这个程序转的http://www.cnblogs.com/microgrape/archive/2011/05/12/2043932.html) 1 #include <iostream> 2 #include <map> 3 #include <utility> 4 #include <functional> 5 #include <string> 6 #include <sta 阅读全文

posted @ 2012-05-23 17:15 为梦飞翔 阅读(4789) 评论(0) 推荐(0)

如何判断一颗二叉树为完全二叉树

摘要: 基本思想:(1)若跟节点非空,则入队。(2)让p指向队列的对头,若p为NULL,则遍历队列的所有元素,如果出现非空值则返回false,否则返回true(3)若P非空,则将p的左右孩子入队,然后将P出队(这个地方可以在获取p的时候进行出队也行,另外入队的节点不论空与否都会进入)(4)重复步骤(2)(3)直到队列为空(5)结束算法 1 bool ComBinTree(BinTree BT){ 2 Queue Q; 3 if(BT!=NULL) 4 EnQueue(Q,BT); 5 while(!isEmptyQueue(Q)){ 6 Bi... 阅读全文

posted @ 2012-05-23 16:33 为梦飞翔 阅读(661) 评论(0) 推荐(0)

如何复制一棵二叉树

摘要: 基本思路:(1)如果树非空,则复制该根节点,同时,把这两个节点分别进入QueueFormer,QueueCopy(2)让pFormer指向QueueFormer的对头,pCopy指向QueueCopy的队头。(3)pFormer的左右孩子,若非空,则复制其data,同时修改pCopy的左右孩子的指针,并对非空节点都入站操作,(4)对QueueFormer和QueueCopy出栈(对头节点已完成复制)(5)重复(2)~(4)直到队列为空(6)返回头指针,复制完成。代码: 1 BinTree CopyTree(BinTree BT){ 2 Queue QueueFormer; 3 ... 阅读全文

posted @ 2012-05-23 14:05 为梦飞翔 阅读(5666) 评论(0) 推荐(0)

二叉树交换左右子树非递归算法

摘要: 基本思想:(先序,中序,后序,层次遍历都可以实现,本质就是就是交换每个节点的左右孩子)(1)若树非空,则入队(2)若队头指针的左右孩子非空,则入队。(3)交换对头节点的左右孩子,出队。(4)重复步骤(2)(3)直到队列为空(5)交换结束。算法: 1 void Exchange(BinTree BT){ 2 Queue Q; 3 initQueue(Q); 4 if(BT!=NULL){ 5 EnQueue(Q,BT); 6 } 7 while(!isEmptyQueue(Q)){ 8 BinTree p=QueueHead... 阅读全文

posted @ 2012-05-23 10:57 为梦飞翔 阅读(6594) 评论(0) 推荐(1)

如何判断两个链表是否相交,以及交点

摘要: 基本思路1:链表1,2均没有环把链表1首尾相连,判断链表2是否有环,若有环,则相交。基本思路2:遍遍历链表1,2,若尾指针相等,则相交。如何就交点:链表1和链表2的长度想减求绝对值,较长的链表先移动差值个位置,然后两个链表同时移动,相等的地方即为交点。算法也不给出了 阅读全文

posted @ 2012-05-23 10:19 为梦飞翔 阅读(959) 评论(0) 推荐(0)

如何判断链表是否有环

摘要: 基本思想:使用快慢指针,慢指针每次向后移动一个位置,快指针每次移动两个位置。这样如果没环,快指针或快指针的next先为空,返回false若有环,快指针一定可以追上慢指针,即两者会相等,则返回true代码 1 bool HaveHuan(ListNode LN){ 2 ListNode p=LN; 3 ListNode pSlow=pFast=p; 4 while(pFast!=NULL&&pFast->next!=NULL){ 5 pSlow=pSlow->next; 6 pFast=pFast->next->next; 7 ... 阅读全文

posted @ 2012-05-23 10:12 为梦飞翔 阅读(396) 评论(0) 推荐(0)

导航