Data Structures and Algorithms
「已注销」
这个作者很懒,什么都没留下…
展开
-
如何反转二叉树以及判断两棵二叉树是否为反转二叉树
反转二叉树反转二叉树,也可以称为镜像二叉树,指所有非叶子节点交换左右子树,得到另一课二叉树,用递归来实现比较简单:public static<T> BinaryTreeNode<T> mirrorOfBinaryTree(BinaryTreeNode<T> root){ // 反转二叉树 BinaryTreeNode<T> temp; if(root != null)原创 2017-04-07 20:22:29 · 755 阅读 · 0 评论 -
二叉树求两个结点的父节点及一个结点的所有祖先结点
求两个结点的父节点有一个比较简单的方法是遍历二叉树数,判断结点的左右结点是否为给出结点。这里采用另外一种方法:public static<T> BinaryTreeNode<T> LCA(BinaryTreeNode<T> root, BinaryTreeNode<T> a, BinaryTreeNode<T> b){ // 查找a,b结点的父结点 BinaryTre原创 2017-05-05 16:09:47 · 1982 阅读 · 0 评论 -
二叉树层次遍历
public void levelOrder(BinaryTreeNode<T> root){ // 层次遍历 LLQueue<BinaryTreeNode<T>> queue = new LLQueue<>(); BinaryTreeNode<T> temp; if(root == null) return;原创 2017-04-06 19:25:40 · 432 阅读 · 0 评论 -
二叉树
如果一棵数中的每个结点有0、1或者2个孩子节点,那么这棵树就称为二叉树,下面是Java中二叉树的定义,包括三种递归遍历方法,非递归遍历会在后一篇文章中介绍。import stack.LLStack;public class BinaryTreeNode<T> { /** * 本类中使用的栈为自定义栈,也可以使用java中封装的栈 */ private T data原创 2017-04-06 13:37:30 · 220 阅读 · 0 评论 -
队列
队列是一种只能在一端插入(队尾),在另一端删除(队首)的有序线性表,所以,队列是一种先进先出(FIFO)线性表。 Java中定义了Queue接口,用以支持队列的常见操作。Queue接口与List、Set同一级别,都是继承了Collection接口,LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用:Queue<Integer> queue = new原创 2017-04-02 23:34:46 · 655 阅读 · 0 评论 -
栈经典问题之前缀、中缀、后缀表达式
定义中缀表达式是一个通用的算术逻辑表示法,是最常见的一种表达式,如5*(2+3)-4;前缀表达式是一种没有括号的算术表达式,与中缀表达式不同的是,其将运算符写在前面,操作数写在后面,如上述表达式的前缀表示为- * 5 + 2 3 4后缀表达式不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行,上述表达式的后缀表示为5 2 3 + * 4 -中缀、前缀、后缀表达式原创 2017-03-31 21:49:23 · 1717 阅读 · 1 评论 -
如何逆向逐层输出树中的元素
如下所示的二叉树: 输出:13 5 9 10 7 4 8 12 6 3 11 2 1public static<T> void levelOrderTraversalInReverse(BinaryTreeNode<T> root){ // 逆向逐层输出元素 if(root == null) return; DynArrayQueue<B原创 2017-04-11 09:13:18 · 1208 阅读 · 0 评论 -
获取二叉树叶子节点个数的递归及非递归算法
递归算法public static<T> int numOfLeavesInRecursion(BinaryTreeNode<T> root){ // 获取二叉树叶子节点的个数的递归算法 if(root == null) return 0; if(root.getLeft() == null && root.getRight() == null原创 2017-04-11 09:20:59 · 9420 阅读 · 0 评论 -
求二叉树深度的递归和非递归算法
递归算法public static<T> int heightOfBinaryTreeInRecursion(BinaryTreeNode<T> root){ // 求二叉树的深度递归算法 int leftHeight,rightHeight; if(root == null) return 0; leftHeight = he原创 2017-04-11 09:47:44 · 2550 阅读 · 0 评论 -
二叉树三种遍历的非递归形式
前序遍历非递归算法public void preOrderNonRecursion(BinaryTreeNode<T> root){ // 非递归前序遍历 LLStack<BinaryTreeNode<T>> stack = new LLStack<>(); while(true){ while(root != null){原创 2017-04-06 14:14:33 · 587 阅读 · 0 评论 -
栈
通过动态数组实现栈public class DynArrayStack<T> { /** * 通过动态数组来实现栈 * 1、capacity为数组容量 * 2、定义数组初始容量为10,当栈满后数组容量变为原数组的1.5倍 */ private int top = -1; // 栈顶所在位置 private int capacity =原创 2017-03-31 12:47:35 · 277 阅读 · 0 评论 -
单向链表的定义及基本操作
类型声明public class ListNode { private int data; private ListNode next; public ListNode(int data){ this.data = data; } public int getData() { return data; } public原创 2017-03-19 21:05:44 · 663 阅读 · 0 评论 -
根据中序遍历和前序遍历构建二叉树
一下序列组合能唯一确定一棵唯一的二叉树:中序和前序中序和后序中序和层次下面就来说说通过中序和前序序列构造二叉树: 1、从前序序列中取一个元素,然后将前序序列索引加一(注意将其定义为静态变量) 2、根据所选元素的值,创建一个新的树节点(root) 3、查找所选结点在中序序列中的索引,用遍历tempIndex标记 4、递归调用BuildBinaryTree为tempIndex之前的所有结原创 2017-04-07 19:56:38 · 353 阅读 · 0 评论 -
逆置栈中的内容
问题: 给定一个栈,逆置栈中的内容,要求只能只用栈操作push和pop,不能用数组、栈、队列等做过渡。基本思路: 用递归,先将原来栈中的元素递归出栈,直至栈为空,然后在每次递归向上步骤时,将上一步中出栈的元素插入栈底,具体代码如下:import java.util.Stack;public class ReverseStack { /* * 给定一个栈,将其中的内容逆置原创 2017-09-11 16:40:51 · 2149 阅读 · 0 评论