链表,二叉树相关算法的简单整理

最近在刷牛客网的剑指offer的题,感觉自己的编程能力还是很差,有时候有思路但是总是需要调试蛮久的时间,但是练习的太少。

链表

A->B->C->D

简单的说单链表就是一个当前的节点只指向链表的下一个节点,链表的前一个节点不知道,它的每一个节点中只保留这当前节点的值,和下一个节点.

(1)找出链表倒数第K位的数据(稳定性)

         排除,链表为空,链表的长度小于K的情况。

         双指针,一个指针先走K-1步,另一个指针开始移动

(2)将链表中的数据根据比K的数放在左边,比K小的数据放在右边,相对位置不发生变化。

         新建两个链表,一个保存比K小的,一个保留比K大的(以空间换时间)

(3)删除链表中的一个节点

         由于不知道上一个节点,但是知道下一个节点,复制下一个节点的所有信息就可以了

(4)将两个排完序的链表进行合并,合并后的链表还是有序的

          新建一个链表,哪个链表的值大,谁的指针向后移动一位,原理比较简单,但是注意指针的移动

(5)删除链表中重复的元素节点

         排序,然后再比较

(6)翻转链表(没有额外的空间)

          随着指针的移动改变节点的指向

二叉树

(1)恢复二叉树,已知前序中序,已知中序后序

         迭代,根据中序获取根节点,根据前序和后序获取左右子树的长度

(2)前序、中序、后序

         中序:迭代比较方便

         前序和后序:用栈比较方便

(3)二叉树镜像

        左右节点互换

(4)已知两个二叉树,判断是否是子树

         序列化两个二叉树,用KMP算法

(5)打印,序列化二叉树

         每层的最后一个节点位置要控制好

猜你喜欢

转载自www.cnblogs.com/yeyangplus/p/9507935.html