1.获取此层的size
2.循环size次:将本次数值添加到list中,并依次将左(先),右(后)添加到Queue中
平衡二叉树
定义:每一颗子树,左高-右高≤1
解析:每次返回当前节点的高度和是否平衡的信息
高度计算:在左数的高度和右数的高度取最大值再加1
是否平衡:1.左树平衡2.右树平衡3.左数的高度减上右数的高度<2
搜索二叉树
定义:对于每一个节点来说,每一个左树都比我小,每一个右树都比我大
中序遍历严格递增,必然是搜索二叉树,反之也成立
分析:定义一个对象,对象分为三个参数:max,min,是否是搜索二叉树,
max,min:先定义最小值和最大值都是这个数本身,拿左树的最大(小)值和右树的最大(小)值跟现有的max,min做比较取值
是否是搜索二叉树:左右树都是搜索二叉树,并且左树的最大值小于传入的数值,右树的最小值大于传入的数值
定义:给定一个数,返回一个二叉树,能否返回一条路径(从头到尾,不能中断,要到叶节点 )上所有节点的值的和等于这个数
分析:为叶节点,叶节点加上之前相加总和等于这个数,则为true,
不为叶节点,加上本次值,当左节点/右节点不为空时,回调
定义:给定一个数,返回所有等于这个数的路径
分析:定义一个方法,方法的入参为(当前节点,当前路径,presum,sum,结果大list)
1.判断是否是叶节点,如果是叶节点,并且路径和等于sum,则当前路径加上此节点,总list加上copy(当前路径),当前路径减去当前节点,返回,不是叶节点直接返回
2.不是叶节点,presum加上当前数,当前路径加上当前节点,判断左/右节点是否不为空,回调,当前路径删除此节点
1)单个字符串中,字符从前到后的加到一棵多叉树上
2)字符放在路上,节点上有专属的数据项(常见的是pass和end值)
3)所有样本都这样添加,如果没有路就新建,如有路就复用
4)沿途节点的pass值增加1,每个字符串结束时来到的节点end值增加1
设计一种结构。用户可以:
1)void insert(String str) 添加某个字符串,可以重复添加,每次算1个
2)int search(String str) 查询某个字符串在结构中还有几个
3) void delete(String str) 删掉某个字符串,可以重复删除,每次算1个
4)int prefixNumber(String str) 查询有多少个字符串,是以str做前缀的
先序:任何子树的处理顺序都是,先头节点、再左子树、然后右子树
中序:任何子树的处理顺序都是,先左子树、再头节点、然后右子树
后序:任何子树的处理顺序都是,先左子树、再右子树、然后头节点
1.先序遍历:先把头节点压入栈,栈顶出来为cur,有右压入右,有左压入左
2.中序遍历:2.1当前节点为cur,以cur为头的左数全部压入栈直到为空,2.2栈中弹节点打印,节点右孩子为cur 2.3栈为空停止
3.后序遍历:把先序遍历的结果压入一个栈,再弹出
解析:创建一个队列,先将头节点放进队列,出队列,有左放左,有右放右
解析:将二叉树携程一个String,用逗号隔开,为null的用占位符代替
例如:N=1时,打印: down N=2时,打印: down down up
解析:折纸的折痕可以看做是一个以凹折痕为头的二叉树,每次折纸都会在两端折痕处多一个上凹下凸的折痕,
而打印折痕就是做一个中序遍历的打印
解析:将多叉数的孩子都放在二叉树以多叉树head为头的左数的右孩子上
解析:准备5个变量:当前节点,当前层结束节点,下一层结束节点,最大层数,当前层节点数
二叉树结构如下定义:
Class Node {
V value;
Node left;
Node right;
Node parent;
}
定义:后继节点就是中序遍历中,当前节点的下一个节点
解析:分为两种情况:1.没有右树,后继节点就是右树的第一个子节点
2.有右树,往上找父亲,当找到某一个父亲是它父亲的左孩子停止,它就是后继节点
解析: 分为两种情况:1.有右树没有左树,肯定不是完全二叉树
2.遇到左右不双全的,剩下的节点必是叶节点
解析:分为两种情况:1.经过头节点:最大距离就是求左树的高度+右树的高度+1
2.不经过头节点:就是求左树的最大距离或右树的最大距离
这两种情况求最大值
解析:就是看这颗数的size是否等于2^n-1
解析:二叉树的递归套路
1.向每一个节点获取最大搜索子树的大小,子树总大小,最小值,最大值
解析:分为四种情况:1.左满,右满
2.左完全,右满,左高右高+1
3.左满,右满,左高右高+1
4.左满,右完全,左高==右高
解析:分为两种情况:1.x是答案
1.1左右各一个
1.2x是a,左右b
1.3x是b,左右a
2.与x无关
2.1左有答案
2.2右有答案
2.3a,b不全
定义:员工信息的定义如下:
class Employee {
public int happy; // 这名员工可以带来的快乐值
List subordinates; // 这名员工有哪些直接下级
}
公司的每个员工都符合 Employee 类的描述。整个公司的人员结构可以看作是一棵标准的、 没有环的多叉树。树的头节点是公司唯一的老板。除老板之外的每个员工都有唯一的直接上级。 叶节点是没有任何下属的基层员工(subordinates列表为空),除基层员工外,每个员工都有一个或多个直接下级。
这个公司现在要办party,你可以决定哪些员工来,哪些员工不来,规则:
1.如果某个员工来了,那么这个员工的所有直接下级都不能来
2.派对的整体快乐值是所有到场员工快乐值的累加
3.你的目标是让派对的整体快乐值尽量大
给定一棵多叉树的头节点boss,请返回派对的最大快乐值。
条件:上下级只能去一个
解析:定义一个类,收集每一层不包含自己的最大快乐值,和包含自己的最大快乐值