可以依次取出最小的元素向下建堆的实际时间复杂度是O(N)
第一种
解决了空间容易不够的问题,其实很多的整数,你想找到前几个,就可以用建小堆的方法,让这个先存到里面,然后再让外部数据和这个堆顶的比较,如果比它大就可以进来
时间复杂度基本相同
代码实现
三种序列用于实现不同的功能
前序遍历的代码
递归的过zho'zhong
栈是从高地址向低地址生长,靠栈指针 esp/rsp移动来分配、释放栈帧,根本不做内存清零。
- 调用左子树:栈指针向下移动,划出一块区域,作为左递归各个栈帧。
- 左递归全部返回:只把栈指针往回移动,直接 “回收” 这片空间,不会擦除里面旧数据。这块内存现在逻辑上属于空闲。
- 紧接着调用右子树:再次移动栈指针,重新划出同样大小的一块区域做右子树的栈帧。
👉物理上:很大概率就是刚才左递归释放掉的那片内存区域,地址范围重合。
👉逻辑上:这是两次完全独立的栈帧,不是在复用旧栈帧。旧栈帧已经死亡,现在是全新的调用实例。
中序打印定义成静态的无法正确解决问题会在调用一次后保存原有的值
思路在线
代码实现,但左和右都为空时就不向后遍历
找叶子节点的个数,左右都是空的是叶子节点
高度
这种方式没法记录下一个递归的值不止二倍复杂度,每次函数比较完加的时候还得重新算
保留好值不会频繁递归
求第k层节点个数
寻找节点等于x的值的节点并返回
简化版本
树是否相同比较
判断是否对称