Leetcode Trees

C++

Posted by PZ on March 4, 2020

KEY Points:

Traversal – Recursion –> function order –> save memory of run-time stack :rofl:

主要解决方法:

recursion + recursion !!!! 当BFS的时候,可以queue或者两个vector,然后swap :speech_balloon:


Traversal - Recursion

img

Traversal - Iteration

img

img

img

img

Leetcode 113 Path Sum II

img

img

img

img

Leetcode 124 Binary Tree Maximum

:speak_no_evil:访问的过程中更新ans ms 表示是从一个节点一直走到leaf的值,这个过程中就间接更新了 每个节点的maxPathSum (这个节点是转折点);

img

img

Leetcode 129 Sum root to leaf numbers

当top-down的时候就是传入argument当bottom-uP 的时候就是return value;

img

BST

:two_hearts:**BST binary search tree 是 left child < root < right child **

Leetcode 297 Serialize and Deserialize Binary Tree

递归前序遍历,这样反过来也可以递归遍历,代码比较容易运用string流来前序遍历,因为读取之后,就会消失,很方便

img

img



Binary Search Tree

添加虚头节点 recursion in-order traversal BST 就是一个排序好的vector

img

img

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

img

链表常用技巧 !!

做有关链表的题目,有个常用技巧:添加一个虚拟头结点:

ListNode *head = new ListNode(-1);

可以简化边界情况的判断