劍指offer第二天
阿新 • • 發佈:2018-01-18
圖片 solution val table inf image mat double 包含min函數的棧
18.二叉樹的鏡像
操作給定的二叉樹,將其變換為源二叉樹的鏡像。
/** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { public void Mirror(TreeNode root) { if(root != null){ TreeNode temp = root.left; root.left = root.right; root.right = temp; if(root.left!=null) Mirror(root.left); if(root.right!=null) Mirror(root.right); } } }
==19.順時針打印矩陣(這道題有難度)==
==見書P161==
輸入一個矩陣,按照從外向裏以順時針的順序依次打印出每一個數字,例如,如果輸入如下矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次打印出數字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
知識點:
關於值傳遞和引用傳遞可以得出這樣的結論:
- 基本數據類型傳值,對形參的修改不會影響實參;
- 引用類型傳引用,形參和實參指向同一個內存地址(同一個對象),所以對參數的修改會影響到實際的對象;
- String, Integer, Double等immutable的類型特殊處理,可以理解為傳值,最後的操作不會修改實參對象。
import java.util.ArrayList; public class Solution { public ArrayList<Integer> printMatrix(int [][] matrix) { if(matrix == null) return null; ArrayList<Integer> result = new ArrayList<>(); int start = 0; while(start*2<matrix.length&&start*2<matrix[0].length){ printMatrixCircle(matrix,start,result); start++; } return result; } public void printMatrixCircle(int [][] matrix,int start,ArrayList<Integer> result){ int endX = matrix[0].length - 1 - start; int endY = matrix.length - 1 - start; for(int i = start;i <= endX;i++){ result.add(matrix[start][i]); } if(start < endY){ for(int i = start +1;i <= endY;i++) result.add(matrix[i][endX]); } if(start<endX&&start<endY) for(int i = endX -1;i>=start;i--) result.add(matrix[endY][i]); if(start<endX&&start<endY-1) for(int i = endY -1;i>start;i--) result.add(matrix[i][start]); } }
20 包含min函數的棧
定義棧的數據結構,請在該類型中實現一個能夠得到棧最小元素的min函數。
import java.util.Stack;
public class Solution {
Stack<Integer> stack = new Stack<Integer>();
Stack<Integer> minStack = new Stack<Integer>();
int min;
public void push(int node) {
stack.push(node);
if(minStack.empty())
min = node;
else
min = Math.min(minStack.peek(),node);
minStack.push(min);
}
public int pop() {
minStack.pop();
return stack.pop();
}
public int top() {
return stack.peek();
}
public int min() {
return minStack.peek();
}
}
劍指offer第二天