7.13 第一次得看题解
7.14 用自己的套路可以 A 出来!15号再做一下吧!
7.15 还是能 A 得出来。
7.16 一次 AC

题目描述


原题链接:https://leetcode-cn.com/problems/er-cha-shu-de-jing-xiang-lcof/

解题思路


K 神题解:https://leetcode-cn.com/problems/er-cha-shu-de-jing-xiang-lcof/solution/

  • 下面是我自己用先序遍历二叉树总结出来的套路写的代码,和 K 神的不太一样!

  • 5~7行是对二叉树的根节点做什么:交换根节点左右俩子节点的位置,但要记得暂存左子节点的值然后传给右子节点,不然先序遍历不了。

  • 至于第9行和第10行的返回值:由于本方法最后返回的是本节点,根据题目要求最后要返回根节点,这没毛病,回溯到最上层后确实就是返回本节点也就是根节点了。但是第9行和第10行的方法也有返回值,那要用啥去接呢?这个时候就想返回的节点相对于本节点是什么角色?很明显,第9行返回的节点是本节点的左子节点,那用本节点的左指针去接准没错!第10行的同理。其实这里只是起到了接值的作用,并没有其它太大的用途!

7.16 思路:

  • 拿到题目首先就可以确定只需要同时遍历一颗二叉树就行,直接套先序遍历的模板就行了,关键在于“要对当前节点做什么”很简单:就是交换左右子节点的位置就行了。

    1. class Solution {
    2. public TreeNode mirrorTree(TreeNode root) {
    3. if(root == null) return root;
    4. TreeNode tmp = root.left;
    5. root.left = root.right;
    6. root.right = tmp;
    7. root.left = mirrorTree(root.left);
    8. root.right = mirrorTree(root.right);
    9. return root;
    10. }
    11. }