1. 程式人生 > 實用技巧 >劍指offer 27 - 映象二叉樹(Leetcode 226)

劍指offer 27 - 映象二叉樹(Leetcode 226)

題目

https://leetcode-cn.com/problems/er-cha-shu-de-jing-xiang-lcof

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

題意

請完成一個函式,輸入一個二叉樹,該函式輸出它的映象。

例如輸入:

     4
   /   \
  2     7
 / \   / \
1   3 6   9

映象輸出:

      4
    /   \
  7     2
 / \   / \
9   6 3   1

示例 1:

輸入:root = [4,2,7,1,3,6,9]
輸出:[4,7,2,9,6,3,1]

限制:
0 <= 節點個數 <= 1000

思路

author's blog == http://www.cnblogs.com/toulanboy/

通過先序遍歷的邏輯,一層一層往深處走。
藉助遞迴的特徵,返回的過程就是從葉子逐步到樹根。
那麼只需在返回時加入交換左右的邏輯,就可以實現從葉子到樹根的逐層的兩兩交換。

程式碼

//author's blog == http://www.cnblogs.com/toulanboy/
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    //通過先序遍歷的邏輯,一層一層往深處走。最後就可以實現從葉子到樹根的逐層的兩兩交換。
    void exchange(TreeNode * root){
        if(!root){
            return;
        }
        exchange(root->left);
        exchange(root->right);
        swap(root->left, root->right);
    }
    TreeNode* mirrorTree(TreeNode* root) {
        exchange(root);
        return root;
    }
};