数据结构

链表

JZ6 从尾到头打印链表

方法1.遍历

分析

  • 简单的遍历,收集每个节点的val,然后对结果翻转,返回

代码

方法2.递归

分析

  • 采用递归的方式,不断进入下一个节点,当到达最后一个节点指向null时,开始返回

  • 出口条件:当节点是null的时候

image-20220307191100466

代码

JZ25 合并两个排序的链表

方法1:递归

方法2:迭代

JZ18 删除链表的节点

方法1:迭代

JZ23 链表中环的入口结点

方法1:快慢指针

也可以有如下的解法:

JZ77 按之字形顺序打印二叉树

方法1.

JZ82 二叉树中和为某一值的路径(一)

方法1:DFS

方法2:递归

方法3:BFS

JZ34 二叉树中和为某一值的路径(二)

方法1:回溯-递减

方法2:回溯-累加

JZ84 二叉树中和为某一值的路径(三)

JZ68 二叉搜索树的最近公共祖先

JZ86 在二叉树中找到两个节点的最近公共祖先

思路:

1.leftright都为空,说明root的左右子树中都不包含pq节点,返回null即可

2.left不为空,right为空,说明pq不在右子树中(因为右子树为空了),这时,返回left,这里面有下面的两种情况:

  • pq都在left即左子树上,而root节点恰好指向了p或者q

  • pq都在left即左子树上,而root节点未指向了p或者q,指向的是最近公共祖先节点

3.right不为空,left为空,说明pq不在左子树中(因为左子树为空了),这时,返回right,这里面有下面的两种情况:

  • pq都在right即右子树上,而root节点恰好指向了p或者q

  • pq都在right即右子树上,而root节点未指向了p或者q,指向的是最近公共祖先节点

4.left不为空,并且right不为空,说明pq分布在root节点的左右子树的两侧,这时rootpq的最近公共祖先节点,返回

Last updated