Programming

Leetcode-226. Invert Binary Tree

Leetcode-226. Invert Binary Tree

Given the root of a binary tree, invert the tree, and return its root.

Example 1: image

Input: root = [4,2,7,1,3,6,9]
Output: [4,7,2,9,6,3,1]

Example 2: image

Input: root = [2,1,3]
Output: [2,3,1]

Example 3:

Input: root = []
Output: []

<解題>

  1. 把root都存在LinkedList裏,用poll方法去從root開始去取出 *poll方法,用於從列表的頭部(也就是第一個元素)移除並返回該元素
  2. 如果該節點的左子樹不為空,將左子樹加入隊列中。
  3. 如果該節點的右子樹不為空,將右子樹加入隊列中。
  4. 交換該節點的左右子樹。

class Solution {
    public TreeNode invertTree(TreeNode root) {
        LinkedList<TreeNode> q = new LinkedList<TreeNode>();
        if(root != null){
            q.add(root);
        }

        while(!q.isEmpty()){
            // Dequeue front node
            TreeNode temp = q.poll();
            // Enqueue left child of the popped node
            if(temp.left != null)
                q.add(temp.left);
            // Enqueue right child of the popped node
            if(temp.right != null)
                q.add(temp.right);
            // 左右互換
            TreeNode curr = temp.left;
            temp.left = temp.right;
            temp.right = curr;
        }
         return root;   
    }
}

Time Complexity : O(n) Space Complexity : O(n)

補充

image


class Solution {
    public TreeNode invertTree(TreeNode root) {
        if (root == null) return null;

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

        root.left = right;
        root.right = left;

        return root;
    }
}