参考[LeetCode] questions conlusion_InOrder, PreOrder, PostOrder traversal 可以对binary tree进行遍历。
此处说明Divide and Conquer 的做法,其实跟recursive的做法很像,但是将结果存进array并且输出,最后conquer (这一步worst T:O(n)) 起来,所以时间复杂度可以从遍历O(n) -> O(n^2).
实际上代码是一样, 就是把[root.val] 放在先, 中, 后就是pre, in, post order了.
1) Preorder traversal
class Solution: def preOrder(self, root): if not root: return [] left = self.preOrder(root.left) right = self.preOrder(root.right) return [root.val] + left + right # worst T: O(n)
2)
Inorder traversal
class Solution: def inOrder(self, root): if not root: return [] left = self.preOrder(root.left) right = self.preOrder(root.right) return left + [root.val] + right # worst T: O(n)
3) Postorder traversal
class Solution: def postOrder(self, root): if not root: return [] left = self.preOrder(root.left) right = self.preOrder(root.right) return left + right + [root.val] # worst T: O(n)
Maximum Depth of Binary Tree
Balanced Binary Tree
[LeetCode] 236. Lowest Common Ancestor of a Binary Tree_ Medium tag: DFS, Divide and conquer
BInary Tree Maximum Path sum from root to leaf
[LeetCode] 124. Binary Tree Maximum Path Sum_ Hard tag: DFS recursive, Divide and conquer
Binary Tree Level Order Traversal
Binary Tree Level Order Traversal II
Binary Tree Zigzag Level Order . Traversal
Binary Search Tree
Validate Binary Search Tree
Search Range in a Binary Search Tree
Inorder Successor in BST
Implement iterator of BInary Search Tree
Insert a Node in Binary Search Tree
Remove Node in Binary Search Tree
Steps:
1. Find the node
2. Find the maximum node in the left subtree
3. Replace the node with the maximum node in the left subtree.
Special Cases:
1. The node doest have a left child.
2. The maximum node in the left subtree has a left child.
3. The node is the root of the tree.