剑指offer
weich37
这个作者很懒,什么都没留下…
展开
-
剑指offer面试题52 两个链表的第一个公共节点
题目描述:输入两个链表,找出它们的第一个公共节点。注意公共节点指的是具有相同地址的两个节点。解题思路1 双栈法将链表的节点依次压入至两个不同的栈中,再同时出栈,最后一个地址相同的节点则为公共节点。2 链表拼接法如图所示,A,A’分别为拼接前与拼接后的链表,此时设定两个指针pa与pb,分别从A’,B’开始遍历。在代码中不需要将两个链表进行拼接,当pa指针为空时,将它重新指向B链表的头指...原创 2020-03-09 17:02:42 · 167 阅读 · 0 评论 -
剑指offer面试题36 二叉搜索树与双向链表
题目描述:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。解题思路:题目要求得到排序的链表,所以中序遍历二叉搜索树。在遍历的过程中进行节点的左右连接。代码class Solution {public: Node* treeToDoublyList(Node* root) { if(!root)...原创 2020-03-09 10:52:12 · 131 阅读 · 0 评论 -
剑指offer面试题35 复杂链表的复制
题目描述:请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。解题思路:1 哈希表第一步复制原始链表上的每个节点N,由此创建复制节点N‘,同时将<N,N’>对放到一个哈希表中。第二步利用已生成的哈希表对复制节点N‘进行连接。利用空间换取时间,...原创 2020-03-08 15:12:35 · 157 阅读 · 0 评论 -
剑指offer面试题54 二叉搜索树的第k大节点
题目描述:给定一棵二叉搜索树,找出其中第k大的节点。解题思路:从二叉搜索树的定义可知,对二叉搜索树进行中序遍历就可以得到一个按关键字从大到小的一个递增有序序列,通过其递增序列获得第k大节点。代码class Solution {public: int kthLargest(TreeNode* root, int k) { int res = 0;//先进行中序遍历...原创 2020-03-07 20:46:40 · 108 阅读 · 0 评论 -
剑指offer面试题68 - I 二叉搜索树的最近公共祖先
题目描述:给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。解题思路:利用二叉搜索树的特性:若任一节点的左子树非空,则左子树中的所有节点值都小于根节点的值;若任一节点的右子树非空,则右子树中所有节点值都大于根节点的值。因此从二叉搜索树的根节点开始遍历,将根节点值和开始输入的两个节点值比较,1、如果当前节点值在开始输入的两个节点值之间,则当前节点为最近的公共祖先;2、如果当前节点...原创 2020-03-07 20:25:17 · 264 阅读 · 0 评论