树结构
树结构算法
sakurahzy
这个作者很懒,什么都没留下…
展开
-
树的高度
树的高度:1.深度优先遍历(递归) 先遍历左子节点,再遍历右子节点 时间复杂度:每个叶子节点被访问到一次,O(N) 空间复杂度:当是不平衡树的时候,如果所有的节点都是左子节点,递归将会被调用 N 次(树的高度),空间复杂度O(n) 但在最好的情况下(树是完全平衡的),树的高度将是log(N)。因此,在这种情况下的空间复杂度将是O(...原创 2018-10-18 10:27:19 · 290 阅读 · 0 评论 -
二叉搜索树的最小节点绝对值之差/在二叉查找树中寻找两个节点,使它们的和为一个给定值/找出 BST 中的所有众数(出现频率最高的元素)。
关于二叉树的数值运算,一般考虑借用中序遍历为数组;再进行计算的思想。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x;...原创 2018-10-27 10:37:24 · 594 阅读 · 0 评论 -
二叉查找树
1.左边节点的值总是小于等于根节点,右边节点的值总是大于等于根节点修建二叉树:把二叉树的每个节点的值限制在一个范围<L,R>之间思路:先判断根节点的值;如果根节点的值,大于R,则递归左子树的值,根节点+右子树被全部抛弃;如果根节点的值,小于L,则递归右子树的值,根节点+左子树被全部抛弃;如果根节点位于两个值之间,则开始递归求解左子树/右子树是否满足上述条件。pub...原创 2018-10-24 10:09:27 · 77 阅读 · 0 评论 -
二叉搜索树第K小元素
1.思路:迭代法计算出二叉树左节点的个数,如果左节点的个数等于k-1;则根节点就是我们要找的值,如果左节点的个数大于k-1,表明我们要查找的第k个最小元素在左子树中,如果左节点的个数小于k-1,表明要查找的第k个最小元素在右子节点中,找到右子树中第k-count(left)-1个元素就是我们要找的元素/** * Definition for a binary tree node. *...原创 2018-10-24 09:46:20 · 531 阅读 · 0 评论 -
前缀树结构
/*实现一个前缀树*/什么是前缀树?优点?缺点?一般用来做什么?数据结构:包括根节点+儿子节点前缀树的性质:1.每一层节点上面的值都不相同;2.根节点不存储值;除根节点外每一个节点都只包含一个字符。3. 如果字符的种数为n,则每个结点的出度为n,这也是空间换时间的体现,浪费了很多的空间。 4. 插入查找的复杂度为O(n),n为字符串长度。典型应用是 1. 用于统计和排...原创 2018-10-31 10:44:33 · 427 阅读 · 0 评论 -
在二叉查找树中寻找两个节点,使它们的和为一个给定值
给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。使用中序遍历得到有序数组之后,再利用双指针对数组进行查找。应该注意到,这一题不能用分别在左右子树两部分来处理这种思想,因为两个待求的节点可能分别在左右子树中。/** * Definition for a binary tree node. * public class T...原创 2018-10-26 10:31:50 · 626 阅读 · 1 评论 -
树结构之DFS前,中,后序遍历
树结构之DFS前,中,后序遍历 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */clas...原创 2018-10-21 12:12:08 · 990 阅读 · 0 评论 -
树结构层序遍历
层次遍历思想:1.利用队列的数据结构,队列的大小就是当前树层的节点的个数2.先入先出,当队列中的节点出来的时候,存入当前节点的子节点,先入先出,没有影响层次遍历可以顺序遍历,左节点,右节点,也可以逆序遍历;右节点,左节点,在队列中先存入右节点,后存入左节点,先入先出使用 BFS 进行层次遍历。不需要使用两个队列来分别存储当前层的节点和下一层的节点,因为在开始遍历一层的节点时,当...原创 2018-10-21 10:33:13 · 370 阅读 · 0 评论 -
利用有序数组/链表重构二叉搜索平衡树
因为二叉搜索树中序遍历的结果就是一个从小到大排列的数组,因此数组的中间位置的值,就是二叉搜索树的根节点的值;再依次采用递归,分别构建左右子树。 链表和数组的不同在于,数组可以直接索引找到元素,查找方便,链表不能够直接定位到某一个元素;所以要采用链表自己的方法,求中间位置;断开链表;进行迭代链表解法的难点:1.断开链表:采用双指针思路2.查找链表中间节点位置的表达法3.新建树...原创 2018-10-25 10:07:08 · 246 阅读 · 0 评论 -
二叉树的公共祖先
1.找出给点过的两个节点的二叉查找树的公共祖先思路:如果当前根节点的值大于给定的两个节点,则他们的公共节点在根节点的左子树中寻找;如果当前根节点的值小于给定的两个节点,则他们的公共节点在根节点的右子树中查找;如果根节点在给定的两个节点之前或者等于其中的某一个节点,都表明了根节点是这两个节点的公共祖先。class Solution { public TreeNode low...原创 2018-10-25 09:47:29 · 683 阅读 · 0 评论 -
二叉树最长同值路径
给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。与https://leetcode-cn.com/problems/diameter-of-binary-tree/该题相似注意:两个节点之间的路径长度由它们之间的边数表示。示例 1:输入: 5 / \ ...原创 2018-10-20 11:35:27 · 1116 阅读 · 0 评论 -
树的左叶子节点的和
计算给定二叉树的所有左叶子之和。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class ...原创 2018-10-20 10:22:57 · 657 阅读 · 0 评论 -
二叉树的最小深度。
给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(in...原创 2018-10-20 10:09:33 · 90 阅读 · 0 评论 -
二叉查找树
二叉树的修建/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution {...原创 2018-10-22 10:35:37 · 85 阅读 · 0 评论 -
给定一个二叉树,检查它是否是镜像对称的。
给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3利用容器队列先入先出,其实容器的选择没有影响,...原创 2018-10-19 11:45:52 · 997 阅读 · 0 评论 -
树的节点的和以及树的子树:
树的节点的和以及树的子树:由于树的节点的求和运算,是一条路径判断求和,因此不太适合用容器思想。子树是可以的,比较麻烦。采用前序遍历,先存储根节点判断;在存储左子节点判断,在存储右子节点判断,然后迭代替换。//涉及到不是从根节点开始计算的题目;应该从三部分计算:1.根节点+左子节点+右子节点2.重写根节点计算方法求子树:class Solution { publi...原创 2018-10-19 11:01:58 · 1381 阅读 · 0 评论 -
树的操作之递归
1.求树的高度public int maxDepth(TreeNode root) { if (root == null) return 0; return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;}2.平衡树private boolean result = true;public boo...原创 2018-10-18 11:29:05 · 167 阅读 · 0 评论 -
前缀树的和
/*新建前缀树*/1.定义数据结构:根节点的26个子节点,可选,用index表示是哪个单词字母2.新建insert;如果根节点为空,直接返回;如果要插入的字符串为空,就将当前树节点的值设置成给定的value(当前字符串为空有两种情况:1.给定的字符串key=null;value=v;2.key="String",Value=num,在构建树,该key字符串构建完毕,则让当前的节点值等于给定的...原创 2018-11-01 11:23:20 · 144 阅读 · 0 评论