1、二叉树翻转(226)

地址:https://leetcode-cn.com/problems/invert-binary-tree/submissions/

思路:使用递归左右孩子交换。

  1. /**
  2. * @param {TreeNode} root
  3. * @return {TreeNode}
  4. */
  5. var invertTree = function(root) {
  6. if(!root) return root
  7. let right = invertTree(root.right)
  8. let left = invertTree(root.left)
  9. root.left = right
  10. root.right = left
  11. return root
  12. };

2、二叉树层次遍历(102)

地址:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/

思路:在进入while循环之初,记录下这一层结点个数,然后将这个数量范围内的元素push进同一个数组,就能够实现二叉树的分层。

  1. /**
  2. * @param {TreeNode} root
  3. * @return {number[][]}
  4. */
  5. const levelOrder = function(root) {
  6. // 初始化结果数组
  7. const res = []
  8. // 处理边界条件
  9. if(!root) {
  10. return res
  11. }
  12. // 初始化队列
  13. const queue = []
  14. // 队列第一个元素是根结点
  15. queue.push(root)
  16. // 当队列不为空时,反复执行以下逻辑
  17. while(queue.length) {
  18. // level 用来存储当前层的结点
  19. const level = []
  20. // 缓存刚进入循环时的队列长度,这一步很关键,因为队列长度后面会发生改变
  21. const len = queue.length
  22. // 循环遍历当前层级的结点
  23. for(let i=0;i<len;i++) {
  24. // 取出队列的头部元素
  25. const top = queue.shift()
  26. // 将头部元素的值推入 level 数组
  27. level.push(top.val)
  28. // 如果当前结点有左孩子,则推入下一层级
  29. if(top.left) {
  30. queue.push(top.left)
  31. }
  32. // 如果当前结点有右孩子,则推入下一层级
  33. if(top.right) {
  34. queue.push(top.right)
  35. }
  36. }
  37. // 将 level 推入结果数组
  38. res.push(level)
  39. }
  40. // 返回结果数组
  41. return res
  42. };