摘要:题目操作给定的二叉树,将其变换为源二叉树的镜像。再递归的对左子树,以及右子树进行翻转。比如左右有一个是代码执行到交换没啥问题执行到递归,左子树就结束掉了。
题目
操作给定的二叉树,将其变换为源二叉树的镜像。
二叉树的镜像定义:源二叉树
</>复制代码
8
/
6 10
/ /
5 7 9 11
镜像二叉树
8
/
10 6
/ /
11 9 7 5
题解
首先先理解题意,镜像通过以下几个步骤可以实现:
可以看到首先对根节点的左右进行翻转。
再递归的对左子树,以及右子树进行翻转。
之前讲过,链表的题目分为四个步骤:连过来、指针走、断后路、调状态。
二涉及到树的题目,基本都是递归。
一旦涉及到递归,就要搞清楚两个东西:
递归的过程。在这里就是,先翻转根节点,再翻转左子树,再翻转右子树。
递归结束的条件。 这里就是当树为Null的时候不翻转。
</>复制代码
public class Solution {
public void Mirror(TreeNode root) {
// 递归结束条件
if (root == null) return;
// 交换左右
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
// 递归
Mirror(root.left);
Mirror(root.right);
}
}
同时一般,我们会有一些边界case去检查一下代码的鲁棒性。
比如左右有一个是null
</>复制代码
8
/
10 Null
/
null null
代码执行到交换没啥问题:
</>复制代码
8
/
Null 10
/
null null
执行到递归,左子树就结束掉了。
右子树的话还要递归的执行左右子树,也可以执行正确,但是其实没必要。
</>复制代码
public class Solution {
public void Mirror(TreeNode root) {
// 递归结束条件
if (root == null) return;
if (roo.left == null && root.left == null) return;
// 交换左右
TreeNode temp = root.left;
root.left = root.right;
root.right = temp;
// 递归
Mirror(root.left);
Mirror(root.right);
}
}
热门阅读
【Leetcode】175. 组合两个表
jvm类加载机制
学习资料推荐
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/72689.html
摘要:题目二叉树的镜像题目描述操作给定的二叉树,将其变换为源二叉树的镜像。代码题目从上往下打印二叉树题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。解题思路借助队列先进先出的数据结构让二叉树每层依次进入队列依次打印队列中的值代码 二叉树简介 基本结构: function TreeNode(x) { this.val = x; this.left = null; ...
摘要:例如输入前序遍历序列和中序遍历序列,则重建二叉树并返回。操作给定的二叉树,将其变换为源二叉树的镜像。剑指中还有一道类似的变种题目,就是下面的这道,之字形遍历二叉树。最后下面的两道题目分别运用了二叉树先序中序遍历算法。 开篇 以下内容可能偏应试但很好理解,所以大家一定要坚持看下去,因为我们变强的过程注定孤独的,坚持下来就会看到明天的太阳。 回顾 showImg(https://user-...
阅读 2935·2023-04-25 23:08
阅读 1787·2021-11-23 09:51
阅读 1800·2021-10-27 14:18
阅读 3195·2019-08-29 13:25
阅读 2919·2019-08-29 13:14
阅读 3123·2019-08-26 18:36
阅读 2282·2019-08-26 12:11
阅读 893·2019-08-26 11:29