劍指offer 27 - 映象二叉樹(Leetcode 226)
阿新 • • 發佈:2020-09-14
題目
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; } };