代码随想录训练营DAY13 二叉树part01
总结下来,二叉树有两种遍历方式,广度优先和深度优先,前中后序遍历为深度优先,层序遍历为广度优先,这部分代码写起来思路很顺
重点总结一点:写递归题目的思路,我觉得卡尔总结的很好:(代码随想录原话)
这里帮助大家确定下来递归算法的三个要素。每次写递归,都按照这三要素来写,可以保证大家写出正确的递归算法!
- 确定递归函数的参数和返回值: 确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。
- 确定终止条件: 写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。
- 确定单层递归的逻辑: 确定每一层递归需要处理的信息。在这里也就会重复调用自己来实现递归的过程。
// 前序遍历·递归·LC144_二叉树的前序遍历
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<Integer>();
preorder(root, result);
return result;
}
public void preorder(TreeNode root, List<Integer> result) {
if (root == null) {
return;
}
result.add(root.val);
preorder(root.left, result);
preorder(root.right, result);
}
}
总结下来就是,一看参数和返回值,二写终止条件,三想递归逻辑
迭代部分不好寻思,小窍门可以记出入栈的顺序,边写边想
层序遍历用队列
关于二叉树的记忆知识点直接去看卡尔的网站-代码随想录
浙公网安备 33010602011771号