Skip to content

Latest commit

 

History

History
 
 

README.md

学习笔记

遍历

前/中/后序均为深度优先,用递归或stack实现

  • 二叉树遍历用Stack实现时,几个注意点
  1. 前序与中序(背诵)
while (curr != null || !stack.isEmpty()) {
      while (curr != null) {
        res.add(curr.val); //前序与中序仅在此句位置
        stack.push(curr);
        curr = curr.left;
      }
      curr = stack.pop();
      curr = curr.right;
    }
  1. 后序 记得遍历结点后(无右孩子或者右子树已经遍历过),prev=curr, curr=null
while (curr != null || !stack.isEmpty()) {
      while (curr != null) {
        stack.push(curr);
        curr = curr.left;
      }
      curr = stack.pop();
      if (curr.right == null || curr.right == prev) {
        // 访问节点的条件:1. 叶子结点;2. 当前结点的右结点为刚访问过的结点
        res.add(curr.val);
        prev = curr; // 记录刚才结点为刚访问过的结点
        curr = null; // 使下一步循环直接pop元素
      } else {
        //压回并处理右子树
        stack.push(curr);
        curr = curr.right;
      }
    }
  • N叉树前后序遍历 (递归/stack) 前序时,先加node,再将children从右到左push进stack 后序时,先加node,再将children从左到右push进stack -> 最终reverse 即为后序
    while (!stack.isEmpty()) {
      NaryTreeNode node = stack.pop();
      res.add(node.val);
      for (NaryTreeNode child : node.children ) {
          stack.push(child);
      }
    }
    Collections.reverse(res);

N叉树BFS,用queue实现

root为空,直接返回
root入Queue
while !queue.isEmpty
  取出当前queue中的所有元素,加入结果中
  将每个元素的所有children入Queue

滑动窗口模板

slidingWindow(S,T) {
        // 0. 建立needs Map
        countCharFrequencyToMap(p, need);
    
        // 开始滑动窗口,外循环每次移动right
        for (int right = 0, left = 0; right < srcLen; right++) {
          char c = s.charAt(right);
          // 进行窗口内数据更新
          counter = increaseWindowAndCounter(need, window, counter, c);
    
          // while 是否需要收缩窗口
          while (counter == need.size()) {
            // 判断是否更新结果
            if (right - left + 1 == patternLen) {
              res.add(left);
            }
            char d = s.charAt(left);
            // 进行窗口内数据更新
            counter = decreaseWindowAndCounter(need, window, counter, d);
            // 左移窗口
            left++;
          }
        }
    
        return res;
}

用于解决topK问题,Java中用PriorityQueue,自定义Comparator

本周作业

写一个关于 HashMap 的小总结