标签: 值得二刷

48 篇文章

剑指offer67题-No61.序列化二叉树
序列化二叉树即找一种顺序存储二叉树的节点,并以相同的方式能够读取序列重新构建。 换种说法,就是遍历二叉树,记录每个节点,再以同样的方式遍历就可以还原二叉树。 PS:能基于序列化字符串单独还原树的情况: 层次遍历序列(需标记空节点)。 前序或后序遍历序列(需结合中序,或显式标记空节点,如 [1,2,null,null,3])。若序列化时未标记空节点,…
剑指offer67题-No57.二叉树的下一个节点
简单的思路就是递归中序遍历一遍,存在vector里,然后输出。 通常情况下,中序遍历不可能有O1空间复杂度方法,非递归算法也要用栈来辅助。 三种遍历树的非递归算法总结,可以参考blog:二叉树遍历-非递归算法 - 翁德彪 - 博客园 此处贴一个借助栈的中序遍历非递归算法: void InorderTraverse(BiTree T,Stack *s…
剑指offer67题-No56.删除链表中的重复节点
用哈希的方法比较简单,想想直接遍历的方法。 遍历链表,每次比较相邻两个节点,如果遇到了两个相邻节点相同,则新开内循环将这一段所有的相同都遍历过去。 在这一连串相同的节点前的节点,直接连上后续第一个不相同值的节点。 class Solution { public: ListNode* deleteDuplication(ListNode* pHead…
剑指offer67题-No55.链表中的入口节点
双指针算法 快慢指针,指针相遇的时候就是入口。证明如下: 设快指针的速度是慢指针的两倍,环之前有m个节点,环内有c个节点。当慢指针走了a步且两指针相遇时,快指针显然走了a+nc步(n表示快指针的绕环周期)。 再由先前的速度定义,有:2a = a+nc,即a = nc,说明慢指针此时,刚好走了n个环周期,只需要再走m步,就可以到达入口点了。再重置一个…