[路飞]_leetcode 226. 翻转二叉树、leetcode 102. 二叉树的层序遍历

398 阅读2分钟

「这是我参与11月更文挑战的第 28 天,活动详情查看:2021最后一次更文挑战

题目1

题目来源:leetcode 226. 翻转二叉树

翻转一棵二叉树。

示例:

输入:

     4
   /   \
  2     7
 / \   / \
1   3 6   9

输出:

     4
   /   \
  7     2
 / \   / \
9   6 3   1

提出问题

  • 什么是翻转二叉树?
  • 如何实现翻转二叉树?

分析

  • 所谓的翻转二叉树就是左右子节点相互交互一下
  • 递归遍历二叉树,遍历过程中左右子节点相互交互一下

伪代码

  • 首先判断root是否为null,为null直接返回null
  • 递归前节点的左右节点,并赋值给l、r变量
  • 使root.left = r,root.right = l
  • 返回root

代码实现

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {TreeNode}
 */
var invertTree = function(root) {
    if(!root) return null
    let l = invertTree(root.left)
    let r = invertTree(root.right)
    root.left = r 
    root.right = l
    return root
};

题目2

102. 二叉树的层序遍历

给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。

 

示例: 二叉树:[3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7
   

返回其层序遍历结果:

[ [3], [9,20], [15,7] ]

提出问题

  • 二叉树如何进行层序?

分析

  • 递归遍历二叉树每遍历一次,并把push数组中,没递归完一层级k加1

伪代码

  • 定义一个arr存入层序结果
  • 定义一个getResult方法,用于往arr push当前二叉树节点的val,此方法三个参数分别为root,k,arr
  • 首先判断root是否为null,为null直接返回null
  • 判断层级k是否与arr数组的长度length 是否一样,一样的话就往arr变量里arr.push(new Array())
  • 并把当前节点root的值val pusharr[k]
  • 递归调用getResult方法 传入 前节点的左右节点,并使k+1

代码实现

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[][]}
 */
var levelOrder = function(root) {
    let arr = []
    getResult(root,0,arr)
    return arr
};

var getResult = function (root,k,arr){
    if(!root) return null
    if(k == arr.length) arr.push(new Array())
    arr[k].push(root.val)
    getResult(root.left, k+1 ,arr)
    getResult(root.right, k+1 ,arr)
}