1、二叉树翻转(226)
地址:https://leetcode-cn.com/problems/invert-binary-tree/submissions/
思路:使用递归左右孩子交换。
/*** @param {TreeNode} root* @return {TreeNode}*/var invertTree = function(root) {if(!root) return rootlet right = invertTree(root.right)let left = invertTree(root.left)root.left = rightroot.right = leftreturn root};
2、二叉树层次遍历(102)
地址:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/
思路:在进入while循环之初,记录下这一层结点个数,然后将这个数量范围内的元素push进同一个数组,就能够实现二叉树的分层。
/*** @param {TreeNode} root* @return {number[][]}*/const levelOrder = function(root) {// 初始化结果数组const res = []// 处理边界条件if(!root) {return res}// 初始化队列const queue = []// 队列第一个元素是根结点queue.push(root)// 当队列不为空时,反复执行以下逻辑while(queue.length) {// level 用来存储当前层的结点const level = []// 缓存刚进入循环时的队列长度,这一步很关键,因为队列长度后面会发生改变const len = queue.length// 循环遍历当前层级的结点for(let i=0;i<len;i++) {// 取出队列的头部元素const top = queue.shift()// 将头部元素的值推入 level 数组level.push(top.val)// 如果当前结点有左孩子,则推入下一层级if(top.left) {queue.push(top.left)}// 如果当前结点有右孩子,则推入下一层级if(top.right) {queue.push(top.right)}}// 将 level 推入结果数组res.push(level)}// 返回结果数组return res};
