「这是我参与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
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例: 二叉树:[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 push到arr[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)
}