美文网首页
力扣算法 - 翻转二叉树

力扣算法 - 翻转二叉树

作者: Mr_Bob_ | 来源:发表于2020-07-23 18:51 被阅读0次

翻转二叉树

翻转一棵二叉树。

示例:

输入:

    4
   /   \
  2     7
 / \   / \
1   3 6   9
输出:
    4
   /   \
  7     2
 / \   / \
9   6 3   1

思路:
1. 遍历二叉树中每个元素 (遍历方法: 前序、后序、中序、层级遍历)
2.遍历拿到的元素 将元素的左子树 和 右子树 替换 
Java实现
public class _226_翻转二叉树 {

    /**
     * 层序遍历方法
     */
    public TreeNode invertTree(TreeNode root) {
        if (root == null) return root;

        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);

        while (!queue.isEmpty()) {
            TreeNode node = queue.poll();
            TreeNode temp = node.left;
            node.left = node.right;
            node.right = temp;

            if (node.left != null) {
                queue.offer(node.left);
            }

            if (node.right != null) {
                queue.offer(node.right);
            }

        }

        return root;
    }

    /**
     * 中序遍历方法
     */
    public TreeNode invertTree3(TreeNode root) {
        if (root == null) return root;

        invertTree(root.right);
        TreeNode temp = root.left;
        root.left = root.right;
        root.right = temp;
        // root.right right  left 和 right的值已经被调换过了
        invertTree(root.right);

        return root;
    }

    /**
     * 后序遍历方法
     */
    public TreeNode invertTree2(TreeNode root) {
        if (root == null) return root;

        invertTree(root.left);
        invertTree(root.right);
        TreeNode temp = root.left;
        root.left = root.right;
        root.right = temp;

        return root;
    }

    /**
     * 前序遍历方法
     */
    public TreeNode invertTree1(TreeNode root) {
        if (root == null) return root;

        invertTree(root.left);
        TreeNode temp = root.left;
        root.left = root.right;
        root.right = temp;
        // root.left 用left原因是  left 和 right的值已经被调换过了
        invertTree(root.left);

        return root;
    }

    public class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;

        TreeNode(int x) {
            val = x;
        }
    }
}
Swift实现
    func invertTree(_ root: TreeNode?) -> TreeNode? {
        
        if root == nil { return root }
        
        var queue = [TreeNode]();
        queue.append(root!);
        while !queue.isEmpty {
            let node = queue.popLast()
            
            let temp = node?.left
            node?.left = node?.right
            node?.right = temp
            
            if node?.left != nil {
                queue.append((node?.left)!)
            }
            if node?.right != nil {
                queue.append((node?.right)!)
            }
        }
        return root
    }


public class TreeNode {
    public var val: Int
    public var left: TreeNode?
    public var right: TreeNode?
    
    init(_ val: Int) {
        self.val = val
        self.left = nil
        self.right = nil
    }
}

相关文章

  • 力扣算法 - 翻转二叉树

    翻转二叉树 翻转一棵二叉树。 示例: 输入: 输出: 思路: Java实现 Swift实现

  • LeetCode - 226. 翻转二叉树 Swift & Ja

    翻转一棵二叉树。 示例: 来源:力扣(LeetCode)链接:https://leetcode-cn.com/pr...

  • LeetCode - 144. 二叉树的前序遍历 Swift &

    给定一个二叉树,返回它的 前序 遍历。示例: 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 来源:力扣(Le...

  • LeetCode - 94. 二叉树的中序遍历 Swift &

    给定一个二叉树,返回它的中序 遍历。 示例: 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 来源:力扣(Le...

  • 2020-10-22二叉树的中序遍历

    给定一个二叉树,返回它的中序 遍历。 示例: 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 来源:力扣(Le...

  • 翻转二叉树(Java)

    翻转二叉树 对于此题而言,我们使用深度优先算法来遍历二叉树。 1、深度优先算法是根据二叉树的路径进行遍历2、广度优...

  • 力扣算法

    二叉树 二叉树的前序遍历-144[https://leetcode-cn.com/problems/binary-...

  • leecode刷题(24)-- 翻转二叉树

    leecode刷题(24)-- 翻转二叉树 翻转二叉树 翻转一棵二叉树。 示例: 输入: 输出: 备注:这个问题是...

  • LeetCode题解之翻转二叉树

    翻转二叉树 题目描述 翻转一棵二叉树。 示例 : 输入: 输出: 解题思路 方法一:递归 使用递归来翻转二叉树。 ...

  • 力扣算法 - 平衡二叉树

    平衡二叉树 给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的...

网友评论

      本文标题:力扣算法 - 翻转二叉树

      本文链接:https://www.haomeiwen.com/subject/uiohlktx.html