zoukankan      html  css  js  c++  java
  • 剑指 Offer 27. 二叉树的镜像

    题目链接

    剑指 Offer 27. 二叉树的镜像

    题目描述

    完成一个函数,输入一个二叉树,该函数输出它的镜像二叉树。

    解题思路

    1.递归

    之前说过了,二叉树的题目基本上可以利用递归来完成,镜像二叉树实现的本质在于将某个节点的左子树和右子树交换即可。递归代码的具体实现借鉴了后序遍历!

    2.非递归

    在我脑海已经有点固化了:递归的代码如果要变为迭代的方式,一定要采用栈。然而本题出现了意外,利用队列实现非递归。采用了从上向下的思想。

    先把root根节点压入队列中,然后交换root根节点的左右子树,交换完毕后,如果root.left不为空压入队列中,如果root.right不为空,压入队列中,重复以上操作只到队列为空即可。

    AC代码

    1.递归

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
    
        void dfs(TreeNode root){
            if(root == null) return;
            dfs(root.left);
            dfs(root.right);
            TreeNode temp = root.left;
            root.left = root.right;
            root.right = temp;
        }
    
        public TreeNode invertTree(TreeNode root) {
            dfs(root);
            return root;
        }
    }
    

    2.非递归

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public TreeNode mirrorTree(TreeNode root) {
            if(root == null) return root;
            Queue<TreeNode> q = new LinkedList<>();
            q.offer(root);
            while(!q.isEmpty()){
                TreeNode head = q.poll();
                TreeNode temp = head.left;
                head.left = head.right;
                head.right = temp;
                if(head.left != null) q.offer(head.left);
                if(head.right != null) q.offer(head.right);
            }
            return root;
        }
    }
    
  • 相关阅读:
    JAVA中线程池启动定时任务
    JAVA线程池的创建
    JAVA多线程售票问题
    设计模式之一 ---单例模式
    JAVAWeb使用POI做导出Excel
    ThreadLocal实现线程范围内共享
    线程的互斥与同步通信
    Spring-task-timer定时器
    万年历---java版
    linux sed 批量替换字符串
  • 原文地址:https://www.cnblogs.com/XDU-Lakers/p/13525461.html
Copyright © 2011-2022 走看看