KEY Points:
Traversal – Recursion –> function order –> save memory of run-time stack :rofl:
主要解决方法:
recursion + recursion !!!! 当BFS的时候,可以queue或者两个vector,然后swap :speech_balloon:
Traversal - Recursion
Traversal - Iteration
Leetcode 113 Path Sum II
Leetcode 124 Binary Tree Maximum
:speak_no_evil:访问的过程中更新ans ms 表示是从一个节点一直走到leaf的值,这个过程中就间接更新了 每个节点的maxPathSum (这个节点是转折点);
Leetcode 129 Sum root to leaf numbers
当top-down的时候就是传入argument当bottom-uP 的时候就是return value;
BST
:two_hearts:**BST binary search tree 是 left child < root < right child **
Leetcode 297 Serialize and Deserialize Binary Tree
递归前序遍历,这样反过来也可以递归遍历,代码比较容易运用string流来前序遍历,因为读取之后,就会消失,很方便
Binary Search Tree
添加虚头节点 recursion in-order traversal BST 就是一个排序好的vector
if(!root) return;
inorder(root->left);
do something to root: prev = root; // 对每个节点的操作都是在这里进行;
inorder(root->right);
return;
BST找最小值就是一直 root -> left until it is NULL
最大值就是一直 root ->right untile it is NULL
Delete Items in BST
链表常用技巧 !!
做有关链表的题目,有个常用技巧:添加一个虚拟头结点:
ListNode *head = new ListNode(-1);
可以简化边界情况的判断