103.二叉树的锯齿形层序遍历
有两种思路,将层序遍历的节点用两个栈保存,分别存在a栈和b栈中,a栈由右往左存,b栈从左往右存。
另外一个更好的思路就是用双端队列deque<int> q来存储,每一轮先从前往后出,再从后往前出,即可锯齿形遍历。用开关值进行判断,正负1切换。
236.二叉树的公共祖先
直接递归dfs,后序遍历从下往上判断cur的情况,如果cur为p或者为q,直接返回cur; 如果left 和 right 都不为空,那么cur就是公共节点,直接返回cur; 如果有一个子节点不为空,那么就说明此子节点下方有p 或者 q, 那么返回子节点就好 。
主要思想就是通过cur为不为空,来判断是不是和他们的公共节点有关。
还可以利用树的hash思想。unordered_map<int,Treenode*> map建立该hash表,记录每个结点值对应的父结点。 然后首先建立set或者map等等,存储所有p节点的父结点(包括p本身) ,然后再找到所有q节点的父结点,判断在不在dads里,在的话直接return q。
主要思想是建立hash表,存储p的父结点数组,判断q的父结点在不在里面。