每日算法題 | 劍指offer 二叉樹專題 (14) 二叉樹的鏡像

重磅乾貨,第一時間送達

每日算法題 | 劍指offer 二叉樹專題 (14) 二叉樹的鏡像

題目

二叉樹的鏡像

題目要求

操作給定的二叉樹,將其變換爲源二叉樹的鏡像。
每日算法題 | 劍指offer 二叉樹專題 (14) 二叉樹的鏡像

解題思路

存在三種可能:
二叉樹有0個節點
二叉樹有1個節點
二叉樹有多個節點(普通二叉樹和只有單側子節點的二叉樹)


Python :

 1# -*- coding:utf-8 -*-
 2# class TreeNode:
 3#     def __init__(self, x):
 4#         self.val = x
 5#         self.left = None
 6#         self.right = None
 7class Solution:
 8    # 返回鏡像樹的根節點
 9    #從根節點反轉的時候,調整左右子節點,也會把左右子節點帶着的子樹進行了調整。
10    #因此,整棵二叉樹會進行了左右的反轉。
11    def Mirror(self, root):
12        if not root:
13            return None
14        #這裏注意只能用一行來賦值,或是另寫一個swap函數來實現左右交換
15        #如果換成分別賦值,就會出錯
16        root.left, root.right = root.right, root.left
17        if root.left:
18            self.Mirror(root.left)
19        if root.right:
20            self.Mirror(root.right)

C++

 1/*
 2struct TreeNode {
 3    int val;
 4    struct TreeNode *left;
 5    struct TreeNode *right;
 6    TreeNode(int x) :
 7            val(x), left(NULL), right(NULL) {
 8    }
 9};*/
10class Solution {
11public:
12     void Mirror(TreeNode *pRoot) {
13        if(!pRoot)
14            return;
15
16        TreeNode* flag = pRoot->left;
17        pRoot->left=pRoot->right;
18        pRoot->right = flag;
19        Mirror(pRoot->left);
20        Mirror(pRoot->right);
21    }
22};

JAVA

 1public class Solution {
 2    public void Mirror(TreeNode root) {
 3        if(root==null)
 4            return;
 5        if(root.left==null&&root.right==null){
 6            return;
 7        }
 8        //交換子節點
 9        TreeNode temp = root.left;
10        root.left = root.right;
11        root.right = temp;
12        //遞歸
13        Mirror(root.left);
14        Mirror(root.right);
15    }
16}

後記

2020大廠筆試 | 網易提前批(1)

2020大廠筆試 | 網易提前批(2)

數據結構類題目

  • LinkedList
  • 003-從尾到頭打印鏈表
  • 014-鏈表中倒數第k個結點
  • 015-反轉鏈表
  • 016-合併兩個或k個有序鏈表
  • 025-複雜鏈表的複製
  • 036-兩個鏈表的第一個公共結點
  • 055-鏈表中環的入口結點
  • 056-刪除鏈表中重複的結點
  • Tree
  • 004-重建二叉樹
  • 017-樹的子結構
  • 018-二叉樹的鏡像
  • 022-從上往下打印二叉樹
  • 023-二叉搜索樹的後序遍歷序列
  • 024-二叉樹中和爲某一值的路徑
  • 026-二叉搜索樹與雙向鏈表
  • 038-二叉樹的深度
  • 039-平衡二叉樹
  • 057-二叉樹的下一個結點
  • 058-對稱的二叉樹
  • 059-按之字形順序打印二叉樹
  • 060-把二叉樹打印成多行
  • 061-序列化二叉樹
  • 062-二叉搜索樹的第k個結點
  • Stack & Queue
  • 005-用兩個棧實現隊列
  • 020-包含min函數的棧
  • 021-棧的壓入、彈出序列
  • 044-翻轉單詞順序列(棧)
  • 064-滑動窗口的最大值(雙端隊列)
  • Heap
  • 029-最小的K個數
  • Hash Table
  • 034-第一個只出現一次的字符
  • 065-矩陣中的路徑(BFS)
  • 066-機器人的運動範圍(DFS)
  • 具體算法類題目
  • 斐波那契數列
  • 007-斐波拉契數列
  • 008-跳臺階
  • 009-變態跳臺階
  • 010-矩形覆蓋
  • 搜索算法
  • 001-二維數組查找
  • 006-旋轉數組的最小數字(二分查找)
  • 037-數字在排序數組中出現的次數(二分查找)
  • 全排列
  • 027-字符串的排列
  • 動態規劃
  • 030-連續子數組的最大和
  • 052-正則表達式匹配(我用的暴力)
  • 回溯
  • 065-矩陣中的路徑(BFS)
  • 066-機器人的運動範圍(DFS)
  • 排序
  • 035-數組中的逆序對(歸併排序)
  • 029-最小的K個數(堆排序)
  • 029-最小的K個數(快速排序)
  • 位運算
  • 011-二進制中1的個數
  • 012-數值的整數次方
  • 040-數組中只出現一次的數字
  • 其他算法
  • 002-替換空格
  • 013-調整數組順序使奇數位於偶數前面
  • 028-數組中出現次數超過一半的數字
  • 031-整數中1出現的次數(從1到n整數中1出現的次數)
  • 032-把數組排成最小的數
  • 033-醜數
  • 041-和爲S的連續正數序列(滑動窗口思想)
  • 042-和爲S的兩個數字(雙指針思想)
  • 043-左旋轉字符串(矩陣翻轉)
  • 046-孩子們的遊戲-圓圈中最後剩下的數(約瑟夫環)
  • 051-構建乘積數組

劍指offer刷題交流羣

掃碼添加微信,一定要備註研究方向+地點+學校+暱稱(如機器學習+上海+上交+湯姆),只有備註正確纔可以加羣噢。

每日算法題 | 劍指offer 二叉樹專題 (14) 二叉樹的鏡像
▲長按加羣

每日算法題 | 劍指offer 二叉樹專題 (14) 二叉樹的鏡像

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章