二叉树操作
文章平均质量分 59
数据结构中,二叉树是一个非常重要的数据结构,在面试中,也是常考知识点之一,本专栏是针对二叉树的常见,常考操作总结的,主要以代码为主(java),希望能给大家帮助
通凡
这个作者很懒,什么都没留下…
展开
-
二叉树--trie树
闲来无事,写写博客,总结一下trie树;算法原理首先,让我们对trie树来一个比较直观的认识,下面的这个例子,大家应该都能够理解。 下面我们有and,as,at,cn,com这些关键词,那么如何构建trie树呢?在上面这个棵树中,树的根节点没有存储任何的数据,就只是root,而将这些单词按照相同前缀,分支节点的顺序进行存储,这样有一个好处就是,相同前缀的单词的前缀我只需要存储一次就可以了,遍历树原创 2016-06-03 20:26:49 · 5036 阅读 · 0 评论 -
二叉树--后缀trie树
Suffix Trie:又称后缀Trie或后缀树。它与Trie树的最大不同在于,后缀Trie的字符串集合是由指定字符串的后缀子串构成的。比如、完整字符串"minimize"的后缀子串组成的集合S分别如下: s1=minimize s2=inimize s3=nimize s4=imize s转载 2016-06-03 20:32:59 · 4417 阅读 · 1 评论 -
二叉树--红黑树
红黑树定义红黑树,顾名思义,就是树的节点只有红色和黑色两种状态,通过这两种状态的标识和规定颜色的使用,来使树达到相对平衡。为什么说相对平衡?因为在红黑树中,所有的条件限制只能保证,所有路径中最长的路径不能使最短路径的2倍。只能保证相对平衡。有人讨论:红黑树是不是一棵平衡二叉树?因为红黑树不满足严格的平衡二叉树的定义,从严格意义上来讲,红黑树并不是平衡二叉树;但是,红黑树在建立的时候,也是有平衡调整的原创 2016-05-27 19:20:06 · 3946 阅读 · 0 评论 -
二叉树--二叉平衡树
二叉平衡树是二叉树中最为最要的概念之一,也是在语言库或者项目中应用比较广泛的一种特殊的树形结构。二叉平衡树AVL树是高度平衡的而二叉树。它的特点是:AVL树中任何节点的两个子树的高度最大差别为1。 通常AVL树是在二叉搜索树上,经过局部调整而建立的,因此,它还是一棵排序树。上面的两张图片,左边的是AVL树,它的任何节点的两个子树的高度差别都<=1;而右边的不是AVL树,因为7的两颗子树的高度相差为2原创 2016-05-27 14:24:57 · 5033 阅读 · 0 评论 -
二叉树--二叉搜索树
一直对AVL这个英文缩写比较困惑,原来一直以为是平衡二叉树的首字母缩写,但是又想不明白,哈!前段时间才明白原来是种这课树的三个人的名字的首字母的,哎,生活处处有惊喜,无知不可怕,现在我也知道了。废话不多说,下面我们说说,树形结构中的那些平衡二叉树。二叉排序树树的遍历顺序有3种,二叉排序树,顾名思义,就是一颗有序的二叉树,是一种按照中序遍历树中节点,而输出有序队列的一种树形结构,一种特殊的树形结构。定原创 2016-05-27 11:23:13 · 4264 阅读 · 1 评论 -
二叉树--判断平衡二叉树
判断一棵树是不是平衡二叉树,平衡二叉树的定义就是,左右子树的差的绝对值不超过1,其实也就是求解出每个节点的左右子树的深度差。代码如下:public boolean isBalanced(TreeNode root) { if (root == null) return true; if(!isBalanced(root.left)) return false; if (!is原创 2016-05-26 15:37:56 · 658 阅读 · 0 评论 -
二叉树--路径
二叉树中,从根节点到叶节点的每一条连接,我们称之为路径,最短路径和最长路径在之前的博客中,我们已经完成了对他们的讨论,现在我们讨论一下,输出一棵二叉树中全部的路径信息。代码如下所示:public class Operation{ List<String> result = new LinkedList<String>();//存储最后的结果 public List<String> b原创 2016-05-26 10:05:11 · 3502 阅读 · 3 评论 -
二叉树--根据遍历构造二叉树
二叉树中的三种遍历方式,是我们最为熟知的,通过先序遍历+中序遍历或者是中序遍历+后序遍历都可以唯一确定一棵二叉树;但是注意,先序遍历+后序遍历不能确定一棵二叉树,但是如果一棵二叉树中只有度为0和度为2的节点,那么这种遍历方式也是可以确定一棵确定的二叉树的。先序+中序–>构造二叉树下面我们分别来看一下,根据先序+中序遍历的顺序,如何恢复一棵二叉树,代码如下://首先采用递归的方式public Tre原创 2016-05-25 11:02:11 · 4934 阅读 · 2 评论 -
二叉树--深度
在二叉树中,最为常见就是求解一棵树的深度,最为常见的方式分为递归求解和非递归求解,具体代码如下。 树形结构public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; }原创 2016-05-23 16:02:18 · 736 阅读 · 1 评论 -
二叉树--遍历
遍历分为非递归和递归两种形式,递归的遍历很简单,本文主要针对非递归算法进行说明,详细代码如下:static void visit(TreeNode root) { System.out.println(root.key + "----------->" + root.value);}//先序遍历static void preOrder(TreeNode root) {原创 2016-05-23 19:52:38 · 739 阅读 · 0 评论 -
二叉树--反转
1、求二叉树的镜像 最为容易理解的递归代码public TreeNode invertTree(TreeNode root) { if (root == null) { return null; } TreeNode left = root.left, right = root.right; if (root.原创 2016-05-24 11:27:09 · 564 阅读 · 0 评论 -
二叉树--最小路径
最小路径二叉树中的最小路径指的是,二叉树中根节点到达叶子节点的路径中,距离最短的一个。//recursivelypublic int minDepth1(TreeNode root) { if (root == null) { return 0; } else if (root.left != null && root.right != null) {原创 2016-05-24 15:36:02 · 5118 阅读 · 0 评论 -
二叉树--最近公共父节点
给定二叉树中的任意两点,求解该两点的最近公共父节点。程序大致分为递归和非递归两种方式,下面我们先来认识非递归的方式。非递归程序总体的思路:用一种常见高效的数据结构来记录下二叉树中的结构关系,由于是找父节点,所以要用子节点来查找父节点,我们这里用到的是HashMap来进行树形关系的存储。接下来就是先列出一个要求节点的所有父节点,然后比较另一个要求节点的父节点在不在上面的列中,第一个出现的节点,就是我们原创 2016-05-24 17:54:34 · 8162 阅读 · 0 评论