本文最后更新于:2023年3月19日 晚上
                
              
            
            
              Lt122. 买卖股票的最佳时机 II、Lt144. 二叉树的前序遍历、Lt145. 二叉树的后序遍历
给定一个数组,它的第 i  个元素是一支给定股票第 i  天的价格。注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
1 2 3 4 5 示例 1: 2  天(股票价格 = 1)的时候买入,在第 3  天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4  。 4  天(股票价格 = 3)的时候买入,在第 5  天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3  。
示例 2: 
1 2 3 4 5 输入: [1,2,3,4,5] 1  天(股票价格 = 1)的时候买入,在第 5  天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4  。 1  天和第 2  天接连购买股票,之后再将它们卖出。
示例  3: 
1 2 3 输入: [7,6,4,3,1] 输出: 0 解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。 
提示: 
1 <= prices.length <= 3 * 10 ^ 40 <= prices[i] <= 10 ^ 4 
思路 未限制购买次数,实际上只要当前的价格比前一天高就可以卖出。
解答 1 2 3 4 5 6 7 8 9 10 var  maxProfit = function  (prices ) let  sum = 0 ;for  (let  i = 1 ; i < prices.length; i++)if  (prices[i] > prices[i - 1 ]) sum += prices[i] - prices[i - 1 ];return  sum;
难度中等 446 收藏分享切换为英文接收动态反馈root ,返回它节点值的 前序 _ _遍历。
示例 1: 
示例 2: 
示例 3: 
示例 4: 
示例 5: 
提示: 
树中节点数目在范围 [0, 100] 内 
-100 <= Node.val <= 100 
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
思路 递归 二叉树普通递归即可
迭代 可以通过栈来模拟,要注意的先序遍历先访问左节点再访问右节点,所以入栈的时候应该先加入右节点,再加入左节点
解答 递归 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 var  preorderTraversal = function  (root ) const  res = [];const  traverse = (node ) =>  {if  (!node) return ;return  res;
迭代 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 var  preorderTraversal = function  (root ) if  (!root) return  [];const  res = [];const  queue = [];while  (queue.length) {const  node = queue.shift();if  (node.right) queue.unshift(node.right);if  (node.left) queue.unshift(node.left);return  res;
给定一个二叉树,返回它的 后序  *遍历。 示例:**
进阶:  递归算法很简单,你可以通过迭代算法完成吗?
思路 递归 二叉树遍历常规递归即可
迭代 设置一个 prev 用于记录上一个遍历完毕的节点。先将左子树都加入栈中,直到节点的左子树为空。出栈一个元素,判断其是否无右子树和是否为上一个遍历的节点 ,如果是的话,说明为叶子节点或左右子树都已经全部遍历完毕的节点,可以将当前节点的值加入结果数组了,加入后,将 prev 指向当前节点避免重复遍历右子树。
解答 递归 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 var  postorderTraversal = function  (root ) const  res = [];const  traverse = (node ) =>  {if  (!node) return ;return  res;
迭代 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 var  postorderTraversal = function  (root ) const  stack = [];const  res = [];let  prev = null ;while  (root || stack.length) {while  (root) {const  node = stack.pop();if  (!node.right || node.right === prev) {else  {return  res;