重磅乾貨,第一時間送達
題目
二叉樹的鏡像
題目要求
操作給定的二叉樹,將其變換爲源二叉樹的鏡像。
解題思路
存在三種可能:
二叉樹有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刷題交流羣
掃碼添加微信,一定要備註研究方向+地點+學校+暱稱(如機器學習+上海+上交+湯姆),只有備註正確纔可以加羣噢。
▲長按加羣