1.5 Binary Tree & Divide Conquer

二叉树n结点, 高度为[logN, N]

只有balanced binary tree/Optimal binary search tree = logn

iterative

背诵两个程序: • 非递归版本的 Pre Order, In Order

2.1 时间复杂度训练 II

二叉树的时间复杂度一般都为O(n):节点个数*每个节点处理时间

通过O(n)的时间,把规模为n的问题变为n/2?: O(n)

通过O(1)的时间,把规模为n的问题变为n/2: O(logN)

通过O(n)的时间,把n的问题,变为了两个n/2的问题,复杂度是多少? O(NlogN)

Merge sort, Quick sort

通过O(1)的时间,把n的问题,变成了两个n/2的问题,复杂度是多少? O(n)

O(1)+...+O(n)=O(n)

2.2 Templete

递归三要素:preorder

  1. 递归的定义

  2. 递归的拆减

  3. 递归的出口

  4. 递归的调用

    递归(遍历,分治),非递归:Recursion (Traverse, Divide Conquer), Nonrecursion

2.2.1 preorder:根左右

2.2.2 Inorder: 左根右

2.2.3 Postorder:左右根

2.3 Examples

Maximum Depth of Binary Tree

find all root-to-leaf path

Divde and conquer

Minimum Subtree

Subtree with Maximum Average

Balanced Binary Tree

Divide and conquer: 搜集每个子树的:1高度 2是否平衡

Lowest Common Ancestor

给定一棵二叉树,找到两个节点的最近公共父节点(LCA)。

最近公共祖先是两个节点的公共的祖先节点且具有最大深度。

with parent pointer vs no parent pointer

follow up: LCA II & III

2.4 Binary Search Tree BST

从定义出发: • 左子树都比根节点小 • 右子树都不小于根节点

• 从效果出发: • 中序遍历 in-order traversal 是“不下降”序列

Validate Binary Search Tree

一棵BST定义为:

  • 节点的左子树中的值要严格小于该节点的值。

  • 节点的右子树中的值要严格大于该节点的值。

  • 左右子树也必须是二叉查找树。

  • 一个节点的树也是二叉查找树。

    traverse(Inorder) vs divide conquer

Convert Binary Search Tree to Sorted Doubly Linked List

Flattern Binary Tree to Linked List

Last updated