Invert Binary Tree

https://leetcode.com/problems/invert-binary-tree/

Invert a binary tree.

     4

   /   \

  2     7

 / \   / \

1   3 6   9

to

     4

   /   \

  7     2

 / \   / \

9   6 3   1

Trivia:
This problem was inspired by this original tweet by Max Howell:

Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off.

解题思路:

这道题来源于上面写的一条tweet,其实是很简单的题目。Symmetric Tree 这道题里有很类似的思路,下面写一个递归的方法。这道题的返回值是TreeNode,当然也可以用void的返回值。

/**

 * Definition for a binary tree node.

 * public class TreeNode {

 *     int val;

 *     TreeNode left;

 *     TreeNode right;

 *     TreeNode(int x) { val = x; }

 * }

 */

public class Solution {

    public TreeNode invertTree(TreeNode root) {

        if(root == null) {

            return root;

        }

        TreeNode temp = root.left;

        root.left = invertTree(root.right);

        root.right = invertTree(temp);

        return root;

    }

}

若不用递归,就更简单了,虽然代码复杂点。但是会BFS的应该都会,一模一样的便利,只不过多了一个将每个节点左右子节点交换的操作。

/**

 * Definition for a binary tree node.

 * public class TreeNode {

 *     int val;

 *     TreeNode left;

 *     TreeNode right;

 *     TreeNode(int x) { val = x; }

 * }

 */

public class Solution {

    public TreeNode invertTree(TreeNode root) {

        if(root == null) {

            return root;

        }

        Queue<TreeNode> queue = new LinkedList<TreeNode>();

        queue.offer(root);

        while(queue.size() > 0) {

            TreeNode cur = queue.poll();

            TreeNode temp = cur.left;

            cur.left = cur.right;

            cur.right = temp;

            if(cur.left != null) {

                queue.offer(cur.left);

            }

            if(cur.right != null) {

                queue.offer(cur.right);

            }

        }

        return root;

    }

}

 

你可能感兴趣的:(binary)