513. 找树左下角的值:
这题困扰我许久,我看到题解是两种方式,一种是bfs,右子节点先进队列,左再进队列,这样遍历到最后的那一个节点就是最底层的最左节点。
另外一种是递归,设置两个全局变量,一个val,一个deep,递归函数需要参数root,当前深度。如果深度大于deep,就更新val。递归要先递归左子树,再递归右子树。
之所以困扰我许久是因为,我一直在想,如果最底层只有一个右节点怎么办,
【资料图】
599. 两个列表的最小索引总和:
用哈希表,map<string,int> maps,string存数组元素,int存下标,设置sum标记当前的索引和。先遍历一遍list1,存在maps中。遍历list2,如果list2的元素在maps中存在,则判断sum的是否大于当前索引和,大于则将结果集清空,把该元素存进结果集,更新sum为当前索引和,如果sum等于当前索引和,则把该元素存进结果集。
559. N 叉树的最大深度:
这题和 104.二叉树的最大深度 是一个思路。
617. 合并二叉树:
用bfs。
654. 最大二叉树:
用递归,终止条件为nums长度0,返回null。用max_element函数获取最大值迭代器,此为当前的根节点,最大值的左边进入递归,返回值为root的左子树。右同。
144. 二叉树的前序遍历:
用栈迭代或递归。
94. 二叉树的中序遍历:
用栈迭代或递归。
105. 从前序与中序遍历序列构造二叉树:
用递归。如果前序和中序数组长度为0,返回null,找到中序中与前序第一个元素相同的下标i,此时,前序第一个元素为当前的根,根的左子树为前序的第二个元素开始到第i个,中序的i前面,依次递归。
106. 从中序与后序遍历序列构造二叉树:
和105类似。
145. 二叉树的后序遍历:
递归or用栈。先左节点一直入栈,如果左节点为空,右节点入栈,直到null。栈顶出栈,val存入结果集,如果当前栈顶的左节点是出栈的这个节点,那么将root置为栈顶的右节点,否则root=null。
