「这是我参与2022首次更文挑战的第 14 天,活动详情查看:2022首次更文挑战」
题目链接
226. 翻转二叉树 - 力扣(LeetCode) (leetcode-cn.com)
题目描述
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
测试用例
示例 1:
输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]
示例 2:
输入:root = [2,1,3]
输出:[2,3,1]
条件限制
- 树中节点数目范围在 [0, 100] 内
- 100 <= Node.val <= 100
题目分析
题目需要我们翻转二叉数,仔细阅读他的示例,发现他的这个翻转效果为,一个节点下的左右子节点互换位置。那么,这题的解法就是,需要我们遍历他的每一个节点,如果这个节点存在子节点,就去交换他的左右子节点,交换完成后,再对这个节点的子节点做同样的操作。这种解题,最合适的就是,使用递归
我们定义一个函数 changeChild(node),判断传入的 node 非空时,再次判断这个 node 存在左子节点或右子节点(或者都存在),然后引入一个中间变量来交互他的子节点(若其中一个节点为空也不会有影响),最后再对这个节点的左右子节点调用 changeChild(就算其中存在空的子节点,也会在开头判断处理好这种情况)
最后我们调用这个函数,传入 root 作为参数,通过递归的方式交互 root 的子节点以及子节点的子节点,因为我们是在 root 上进行的操作,最后直接返回 root 即可
代码实现
var invertTree = function(root) {
changeChild(root);
return root;
function changeChild(root) {
if (root == null || (root.left == null && root.right == null)) return;
let temp = root.left;
root.left = root.right;
root.right = temp;
changeChild(root.left);
changeChild(root.right);
}
};
当我们捋清楚二叉树的结构以及递归的使用方式,就能很轻易的解决这题