剑指Offer 27. 二叉树的镜像

剑指Offer 27. 二叉树的镜像

  • 题目描述
  • 题解
    • 递归交换左右孩子
  • 运行结果

题目描述

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

示例 1:
给定二叉树输入: 
     4
   /   \
  2     7
 / \   / \
1   3 6   9
二叉树镜像输出: 
     4
   /   \
  7     2
 / \   / \
9   6 3   1

题解

递归交换左右孩子

本质是对二叉树的一次深度优先遍历,从根结点开始,深度优先对每个分支结点的左右孩子进行交换,每次进入递归后首先判断结点是否为空,如果为空表示为空树或遍历至叶子结点的左右孩子位置,当然可以在遍历左右孩子前判断孩子是否为空从而减少递归次数,但实际上对时间复杂度影响不大,算法的空间复杂度取决于递归深度,平均情况下为O(log2n),时间复杂度与DFS一致,为O(n)。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */

struct TreeNode* mirrorTree(struct TreeNode* root){
     
    if(root != NULL) {
     
        //exchange the left and right children of the current node
        struct TreeNode* temp;
        temp = root->left;
        root->left = root->right;
        root->right = temp;

        //continue to deal with the left and right children
        mirrorTree(root->left);
        mirrorTree(root->right);
    }
    return root;
}

运行结果

剑指Offer 27. 二叉树的镜像_第1张图片

你可能感兴趣的:(LeetCode刷题总结,二叉树,数据结构,算法)