数据结构与算法
ZHANG_980
这个作者很懒,什么都没留下…
展开
-
剑指offer--二叉搜索树与双向链表 Java实现
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。分析: 对于二叉搜索树,用中序搜索算法挺适合。考虑每个子树子节点作为三部分,这里以根结点为特殊例子进行阐述递归实现,每次用一个lastNode存放上一个子树的最后一个结点,该结点是上个已排好子树的最大的结点。原创 2017-04-07 11:44:34 · 369 阅读 · 0 评论 -
剑指offer——重建二叉树(JAVA)
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */import java.util.Arrays;import j原创 2017-03-27 18:58:04 · 406 阅读 · 0 评论 -
剑指offer解题报告(Java版)——二叉搜索树转换为双向链表 27
原文链接http://www.cnblogs.com/keedor/p/4467040.html引言 自己觉得对二叉树了解的不是很多,所以想专门练习一下这方面的问题,剑指Offer中有一道题是将二叉搜索树转换为双向链表,开始的时候照着书上的思路去做,最后发现问题很多,看来这本书也有很多问题啊,原因是Java和C++还是有很多不同的,特别是对对象的转载 2017-07-26 14:12:32 · 369 阅读 · 0 评论 -
剑指offer——替换空格的两种方法(Java)
方法一使用String的replace方法import java.util.Scanner;public class Exam3 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(sc.hasNext()){ String str = sc.n原创 2017-03-27 08:39:31 · 417 阅读 · 0 评论 -
剑指offer ——二维数组中的查找
刚接触剑指offer,对二维数组查找有自己的想法,即从对角线处元素开始查找,如果不是n*n矩阵,从最大的m*m矩阵对角线开始查找元素。import java.util.Scanner;public class Exam2 { static int[][] arr = new int[3][3]; public static void main(String[] args) { Scan原创 2017-03-26 16:19:25 · 500 阅读 · 0 评论 -
二叉树中和为某一值得路径
import java.util.Stack;public class Test25_FindPath{ public static void main(String[] args) { //创建二叉树 TreeNode root1 = new TreeNode(10); TreeNode node2 = new TreeNode(5); TreeNode node3 =原创 2017-04-05 23:49:46 · 337 阅读 · 0 评论 -
镜像二叉树并层序打印 Java实现
import java.util.LinkedList;import java.util.Queue;public class Test19_MirrorTree{ public static void main(String[] args) { //创建二叉树 TreeNode headNode1 = new TreeNode(1); TreeNode node2 =原创 2017-04-05 11:59:37 · 363 阅读 · 0 评论 -
剑指offer——树的子结构
public class Test18_hasSubTree{ public static void main(String[] args) { //创建树1 TreeNode headNode1 = new TreeNode(1); TreeNode node2 = new TreeNode(2); TreeNode node3 = new TreeNode(3); T原创 2017-04-05 10:20:59 · 252 阅读 · 0 评论 -
合并两个有序链表(Java递归实现)
public class Test17_MergeList{ public static void main(String[] args) { //创建链表1 Node head1 = new Node(0); System.out.print("====链表1=====\n"+head1.value+" "); Node[] p1 = new Node[5]; i原创 2017-04-04 23:25:58 · 1152 阅读 · 0 评论 -
链表中倒数第k个节点
本题从1开始计数,即链表尾节点是倒数第1个节点public class FindKthNode{ public static void main(String[] args) { //创建链表 Node head = new Node(0); System.out.println(head.value); Node[] p = new Node[5]; int i =原创 2017-04-04 17:11:48 · 371 阅读 · 0 评论 -
从尾到头打印链表(栈和递归两种方式)Java版
从尾到头打印链表(栈和递归两种方式)Java版import java.util.Stack;/** * 从尾到头打印链表 * @author zhang * */public class Test5 { public static void main(String[] args) { //创建链表 ListNode n1 = new ListNode(1); Li原创 2017-03-27 09:47:49 · 1113 阅读 · 0 评论 -
去哪网笔试 按层打印二叉树 Java实现
题目描述 给定一棵二叉树的前序(根、左、右)和中序(左、根、右)的打印结果,输出此二叉树按层(从左往右)打印结果。例如一棵二叉树前序:1 2 4 5 3;中序:4 2 5 1 3。可以构建出下图所示二叉树:按层打印的结果则为:1 2 3 4 5。import java.util.Arrays;import java.util.LinkedList;import java.util.原创 2017-04-01 21:50:54 · 1831 阅读 · 0 评论 -
字符串的排列
import java.util.Scanner;public class Test28_Permutation{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.next(); char[] arr = str.toCharArr原创 2017-04-08 14:45:04 · 331 阅读 · 0 评论 -
二叉树最大深度(Java)
题目:输入一棵二叉树的根节点,求该树的深度。从根节点到叶子结点一次经过的结点形成树的一条路径,最长路径的长度为树的深度。根节点的深度为1。解体思路:如果根节点为空,则深度为0,返回0,递归的出口如果根节点不为空,那么深度至少为1,然后我们求他们左右子树的深度,比较左右子树深度值,返回较大的那一个通过递归调用public class BinaryTreeDepth{public原创 2017-04-18 09:00:25 · 1732 阅读 · 0 评论