理论基础
- 二叉树的种类:满二叉树,完全二叉树,二叉搜索树,平衡二叉搜索树
- 存储方式:数组存储与链表存储
- 遍历方式:深度优先与广度优先
文章讲解:programmercarl.com/%E4%BA%8C%E…
递归遍历
递归前序遍历
// 二叉树的前序遍历
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); //访问有节点
}
递归中序遍历
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
inorder(root, res);
return res;
}
void inorder(TreeNode root, List<Integer> result) {
if (root == null) { //叶子节点直接返回即可
return;
}
inorder(root.left, result); //先访问左节点
list.add(root.val); //然后访问父节点的值
inorder(root.right, result); //最后访问右节点
}
}
递归后续遍历
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
inorder(root, res);
return res;
}
void inorder(TreeNode root, List<Integer> result) {
if (root == null) { //叶子节点直接返回即可
return;
}
inorder(root.left, result); //先访问左节点
inorder(root.right, result); //最后访问右节点
list.add(root.val); //然后访问父节点的值
}
}
题目链接/文章讲解/视频讲解:programmercarl.com/%E4%BA%8C%E…
迭代遍历
思路:前序与后序代码逻辑类似,但是与中序代码逻辑完全不一样
题目链接/文章讲解/视频讲解:programmercarl.com/%E4%BA%8C%E…
统一迭代
思路:遇到要访问的值,则将该值后面加一个null进行标记,每遇到null则弹出null前面的一个元素到result中
题目链接/文章讲解:programmercarl.com/%E4%BA%8C%E…
总结
迭代遍历的逻辑想了大半天,但是还是没怎么掌握,统一迭代的逻辑思路大体了解了