
二叉树题目
dp小王子
讲真的,写博客好累。。。
展开
-
介绍前缀树
介绍前缀树何为前缀树? 如何生成前缀树?是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),经常被搜索引擎系统用于文本词频统计。优点:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。字典树又称为前缀树或Trie树,是处理字符串常见的数据结构。假设组成所有单词的字符仅是“a”~“z”,主要包含以下四个主要功能:void ...原创 2019-01-11 17:36:22 · 249 阅读 · 0 评论 -
先序、中序和后序数组两两结合重构二叉树
【题目】已知一棵二叉树的所有节点值都不同,给定这棵二叉树正确的先序、中序和后序数组。请分别用三个函数实现任意两种数组结合重构原来的二叉树,并返回重构二叉树的头结点。public class PreInPostToBST { public static class Node { public int value; public Node left; public Node right...原创 2019-03-03 17:42:02 · 216 阅读 · 0 评论 -
通过有序数组生成平衡搜索二叉树
【题目】给定一个有序数组sortArr,已知其中没有重复值,用这个有序数组生成一棵平衡搜索二叉树,并且该搜索二叉树中序遍历的结果与sortArr一致。public class GenearteTree { public static class Node { public int value; public Node left; public Node right; publ...原创 2019-03-03 17:41:38 · 327 阅读 · 0 评论 -
根据后序数组重建搜索二叉树
【题目】给定一个整型数组arr,已知其中没有重复值,判断arr是否可能是节点值类型为整型的搜索二叉树后序遍历的结果。public class IsPostArray { public static boolean isPostArray(int[] arr) { if (arr == null || arr.length == 0) { return false; } ret...原创 2019-03-03 17:41:14 · 404 阅读 · 0 评论 -
通过先序和中序数组生成后序数组
【题目】已知一棵二叉树所有的节点值都不同,给定这棵树正确的先序和中序数组,不要重建整棵树,而是通过这两个数组直接生成正确的后序数组。public class GetPosArray { public static int[] getPosArray(int[] pre, int[] in) { if (pre == null || in == null) { return null;...原创 2019-02-26 17:32:32 · 732 阅读 · 0 评论 -
在二叉树中找到两个节点的公共祖先
【题目】给定一个二叉树的头节点head,以及这棵树中的两个节点o1和o2,请返回o1和o2的最近公共祖先节点。【进阶】如果查询两个节点的最近公共祖先的操作十分频繁,想法让单条查询的查询时间减少。public class LowestAncestor { public static class Node { public int value; public Node left; p...原创 2019-02-26 17:32:05 · 472 阅读 · 0 评论 -
Morris遍历二叉树
Morris遍历的实质就是避免用栈结构,而是让下层到上层有指针,具体是通过让底层节点指向null的空闲指针指回上层的某个节点,从而完成下层到上层的移动。中序遍历的过程如下:1.假设当前子树的头节点为h,让h的左子树中最右节点的right指针指向h,然后h的左子树继续步骤1的处理过程,直到遇到某一个节点没有左子树时记为node,进入步骤2。2.从node开始通过每个节点的right指针进行移动...原创 2019-01-16 21:56:33 · 189 阅读 · 0 评论 -
已知一棵完全二叉树,求其节点的个数
已知一棵完全二叉树,求其节点的个数要求:时间复杂度低于O(N),N为这棵树的节点个数思路:因为满树的节点数=2h−1满树的节点数 =2^h-1满树的节点数=2h−1如果一个节点的右子树的最左节点到达完全二叉树的最后一层,则左子树为满树,节点个数等于左子树的节点数+递归求右子树的节点数+本节点,如果此节点的右子树的最左节点没有到完全二叉树的最后一层,则右子树为满树,节点个数等于右子树的节...原创 2019-01-09 16:43:32 · 1582 阅读 · 0 评论 -
判断一棵树是否是搜索二叉树、判断一棵树是否是完全二叉树
判断一棵树是否是搜索二叉树、判断一棵树是否是完全二叉树判断是否是搜索二叉树的思路:如果一颗二叉树在中序遍历过程中出现了当前结点的值比前一节点值小,这说明不是搜索二叉树。判断是否是完全二叉树的思路:1)如果一个结点有右孩子无左孩子一定不是完全二叉树 2)如果一个结点不是左右两个孩子都有(...原创 2019-01-09 13:58:35 · 1185 阅读 · 0 评论 -
判断一棵二叉树是否是平衡二叉树
判断一棵二叉树是否是平衡二叉树public class IsBalancedTree { public static class Node { public int value; public Node left; public Node right; public Node(int value) { this.value = value; } } publi...原创 2019-01-09 13:58:01 · 175 阅读 · 0 评论 -
二叉树的序列化和反序列化
二叉树的序列化和反序列化public class SerializeAndReconstructTree { public static class Node { public int value; public Node left; public Node right; public Node(int value) { this.value = value; }...原创 2019-01-08 16:52:15 · 110 阅读 · 0 评论 -
在二叉树中找到一个节点的后继节点
在二叉树中找到一个节点的后继节点【题目】 现在有一种新的二叉树节点类型如下:public class Node { public int value; public Node left; public Node right; public Node parent; public Node(int value) { this.value = value; }...原创 2019-01-08 16:17:20 · 231 阅读 · 0 评论 -
实现二叉树的先序、中序、后序遍历,包括递归方式和非递归方式
实现二叉树的先序、中序、后序遍历,包括递归方式和非递归方式public class BinaryTree { public static class Node { public int value; public Node left; public Node right; public Node(int value) { this.value = value; }...原创 2019-01-08 16:16:40 · 288 阅读 · 0 评论 -
公司员工参加晚会问题
【题目】一个公司的上下节关系是一棵多叉树,这个公司要举办晚会,你作为组织者已经摸清了大家的心理:一个员工的直接上级如果到场,这个员工肯定不会来。每个员工都有一个活跃度的值,决定谁来你会给这个员工发邀请函,怎么让舞会的气氛最活跃?返回最大的活跃值。public class MaxHappy { public static class Node { public int huo;//此员工...原创 2019-01-18 22:48:08 · 343 阅读 · 0 评论 -
二叉树节点间的最大距离问题
【题目】二叉树中,一个节点可以往上走和往下走,那么从节点A总能走到节点B。节点A走到节点B的距离为:A走到B最短路径上的节点个数。求一棵二叉树上的最远距离。public class MaxDistanceInTree { public static class Node { public int value; public Node left; public Node right;...原创 2019-01-18 22:47:52 · 435 阅读 · 0 评论 -
找到二叉树中的最大搜索二叉子树
【题目】给定一棵二叉树的头节点head,已知其中所有节点的值都不一样,找到含有节点最多的搜索二叉子树,并返回这棵子树的头节点。public class BiggestSubBSTInTree { public static class Node { public int value; public Node left; public Node right; public No...原创 2019-01-18 22:47:31 · 357 阅读 · 0 评论 -
哈夫曼树
一块金条切成两半,是需要花费和长度数值一样的铜板的。比如长度为20的 金条,不管切成长度多大的两半,都要花费20个铜板。一群人想整分整块金 条,怎么分最省铜板?例如,给定数组{10,20,30},代表一共三个人,整块金条长度为10+20+30=60. 金条要分成10,20,30三个部分。 如果, 先把长度60的金条分成10和50,花费60 再把长度50的金条分成20和30,花费50 一共花费11...原创 2019-01-11 17:36:54 · 228 阅读 · 0 评论 -
统计和生成所有不同的二叉树
【题目】给定一个整数N,如果N<1,代表空树结构,否则代表中序遍历的结果为{1,2,3,…,N}.请返回可能的二叉树结构有多少。public class NumTrees { public static int numTree(int n) { if (n < 2) { return 1; } int[] dp = new int[n + 1]; dp[0]...原创 2019-03-03 17:42:38 · 517 阅读 · 0 评论