DataStructure_Algorithm_HandBook_PreForLeetCode

226. Invert Binary Tree

Example 1:

img

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

Example 2:

img

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

Example 3:

Input: root = []
Output: []

Constraints:

Solution:

对于任意节点,我们都要进行翻转,明显是递归的过程。 我们可以用DFS 的算法。

class Solution {
    public TreeNode invertTree(TreeNode root) {
        dfs(root);
        return root;
    }
     void  dfs(TreeNode node){
        if(node == null) return;
        TreeNode tmp = node.left;
        node.left = node.right;
        node.right = tmp;
        dfs(node.left);
        dfs(node.right);
     }
}
class Solution:
    def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
        if not root: return None
        root.left, root.right = root.right, root.left
        invertTree(root.left)
        invertTree(root.right)
        return root

也可以使用 BFS 的方法

class Solution {

    public TreeNode invertTree(TreeNode root) {
        Deque<TreeNode> q = new LinkedList();
        if(root!=null) q.addLast(root);
        while(!q.isEmpty()){
            int size = q.size();
            for(int i =0; i<size;i++){
                TreeNode node = q.pollFirst();
                TreeNode tmp = node.left;
                node.left = node.right;
                node.right = tmp;
                if(node.left!=null) q.addLast(node.left);
                if(node.right!=null)q.addLast(node.right);
                
            }
        }
        return root;
}
}