排序链表 中序遍历 双向链表 pre.next = cur cur.prev = pre 循环链表 head.prev = tail tail.next = head 中序遍历打印/修改指针 def dfs(root): if not root: return dfs(root.left) print(root.val) dfs(root.right) leetcode剑指offer第36题二叉搜
python copy.deepcopy(head) 字典放入节点key 建立两个节点之间的对应关系 复杂链表可看作图 深搜与广搜 记录 leetcode剑指offer第35题复杂链表的复制 深搜 class Solution: def
python listA.append(list(listB)) 二叉树递归的过程中记录搜索路径 二叉树搜索的return可仅停止递归 二叉树回溯借助列表pop() 记录 leetcode剑指offer第34题
列表划分左右子树 二叉搜索树的充要条件(递归定义) 左子树的所有节点的值小于根节点,右子树所有节点的值大于根节点,左右子树也是二叉搜索树 记录 le
AVL树 平衡的二叉搜索树 平衡因子 节点左右子树高度差,左重left-heavy,右重right-heavy 所有节点的平衡因子在-1~1之间,则
BFS通常借助队列的先入先出特性来实现 python collections.deque 标准内建容器的替代选择,deque两端快速添加和弹出,pop/popleft
旋转矩阵 leetcode剑指offer第29题顺时针打印矩阵 旋转法 class Solution: def spiralOrder(self, matrix: List[List[int]]) -> List[int]: ans = [] while matrix: ans.extend(matrix[0]) matrix = list(zip(* matrix[1:]))[::-1] return ans 模拟路径(辅助矩阵或四个边界值) class
栈空间 空间复杂度,二叉树退化为链表,O(n) 平行赋值与暂存 用栈遍历,入栈暂存节点 leetcode剑指offer第27题二叉树的镜像 class Solution: def mirrorTree(self, root:
两次递归 leetcode剑指offer第26题树的子结构 class Solution: def isSubStructure(self, A: TreeNode, B: TreeNode) -> bool: def helper(a, b): if not b: return True if not a: return False if a.val != b.val: return False return helper(a.left, b.left) and helper(a.right, b.right) return bool(A and B) and (helper(A, B)
首尾双指针、快慢双指针 插入顺序不同,生成的BST也不同 递归插入currentNode 有序表二分查找、无序表散列、二叉搜索树 python实现迭