AtOffer笔记-二叉树的镜像&顺时针打印矩阵&包含min函数的栈

来源:互联网 发布:c语言汉诺塔游戏 编辑:程序博客网 时间:2024/05/19 07:10

1、二叉树的镜像

package 剑指offer;/**  * 题目描述:操作给定的二叉树,将其变换为源二叉树的镜像。 * @author 崔洪振367 * @version 创建时间:2017年7月20日 下午10:16:55  */public class 二叉树的镜像 {public void Mirror(TreeNode root){if(root == null){return;}//当一个节点是叶子节点是,不用调换他的左右节点了。if(root.left == null && root.right == null){return;}//使用先序遍历二叉树,然后将他的左右子树进行调换//1、交换根节点的左右字节点,需要一个二叉树结点变量。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);}}}

2、顺时针打印矩阵

package 剑指offer;import java.util.ArrayList;/**  * 题目描述:输入一个矩阵,按照按照从外向里以顺时针的顺序依次打印出每一个数字。 * @author 崔洪振367 * @version 创建时间:2017年7月20日 下午10:36:31  * 解题思路:题目思路不难,但注意边界条件值的判断。 * 两次分析:1)每次打印一周,以(start,start)为打印的起始点,同时判断打印的次数; * 2)每次打印一周,包括四个部分:从左到右,从上到下,从右到左,从下到上。尤其注意边界条件。 */public class 顺时针打印矩阵 {public ArrayList<Integer> printMatrix(int[][] matrix){//合法性判断if(matrix == null || matrix.length == 0){return null;}ArrayList<Integer> list = new ArrayList<>();//以(start,start)为起始点变量一周,循环遍历个圈的起始点所在的一周,//循环满足的条件是矩阵的行>起点Y的2倍,矩阵的列>起点X的2倍int start = 0;int X = matrix.length;//X行int Y = matrix[0].length;//Y列while(X > start*2 && Y > start*2){//遍历一周,将符合条件的元素添加到ArrayList中。int endX = X - 1 - start;int endY = Y - 1 -start;//从左到右添加元素----行不变,列加for(int j = start; j <= endY; j++){int temp = matrix[start][j];list.add(temp);}//从上到下添加元素----行加列不变if(start < endX){for(int i = start+1; i <= endX; i++){list.add(matrix[i][endY]);}}//从右到左添加元素----行不变列减if(start<endX && start<endY){for(int j=endY-1; j>=start; j--){list.add(matrix[endX][j]);}}//从下到上添加元素----列不变行减if(start < endX-1 && start < endY){for(int i = endX-1; i>=start+1; i--){list.add(matrix[i][start]);}}start++;}return list;}}

3、包含min的函数栈

package 剑指offer;import java.util.Stack;/**  * 题目描述:定义栈的数据结构,请在该类型中实现一个能够得到最小元素的min函数。 * @author 崔洪振367 * @version 创建时间:2017年7月20日 下午11:18:07  * 解题思路:需要两个栈配合使用。 */public class 包含min函数的栈 {Stack<Integer> stack = new Stack<>();Stack<Integer> st_min = new Stack<>();public void push(int node){stack.push(node);if(st_min.size() == 0 || node<top()){st_min.push(node);}else {st_min.push(top());//针对stack中的每个元素都对应一个最小值}}public void pop(){if(stack.size()>0 && st_min.size()>0){stack.pop();st_min.pop();}}public int top(){return st_min.peek();}public int min(){if(st_min.size()>0 && stack.size()>0){return top();}return -1;}}

原创粉丝点击