多一些Aha Time,发现技术的美妙🍺|

啊原来是这样呀

园龄:8年3个月粉丝:3关注:9

【LeetCode】8.二叉树系列——基础

总目录:

LeetCode系列导航目录

 

0.理论基础

0.1.种类

满二叉树

如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在最下层,则这棵二叉树为满二叉树。也可以说深度为k,有2^k-1个节点的二叉树

完全二叉树

除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。

二叉搜索树

二叉搜索树是有数值的了,二叉搜索树是一个有序树。

(1)若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;

(2)若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;

(3)它的左、右子树也分别为二叉排序树。

二叉平衡树

又称为AVL(Adelson-Velsky and Landis)树,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵二叉平衡树。

C++中map、set、multimap,multiset的底层实现都是平衡二叉搜索树,所以map、set的增删操作时间时间复杂度是logn。

注意,unordered_map、unordered_set,unordered_map、unordered_map底层实现是哈希表,所以时间复杂度是1。

0.2.存储方式

二叉树可以链式存储,也可以顺序存储。

链式存储

链式存储方式就用指针指向子树

 

 

 顺序存储

顺序存储的方式就是用数组+索引。如果父节点的数组下标是 i,那么它的左孩子就是 i * 2 + 1,右孩子就是 i * 2 + 2。

 

 

 0.3.遍历方式

大类上分为深度优先搜索和广度优先搜索,可以再细分为前/中/后序搜索和层次遍历。

 

 

 

DFS(DeepFirstSearch)深度优先搜索

前/中/后序遍历,指的就是中间节点的遍历顺序。

(1)前序遍历:中左右

(2)中序遍历:左中右

(3)后序遍历:左右中

 

 

 BFS(BroadFirstSearch)广度优先搜索

 一般使用队列来实现,这也是队列先进先出的特点所决定的。具体看代码。

0.4.数据结构

1 struct TreeNode {
2     int val;
3     TreeNode *left;
4     TreeNode *right;
5     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
6 };

0.5.问题归纳

 

本文作者:啊原来是这样呀

本文链接:https://www.cnblogs.com/OhOfCourse/p/16986103.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   啊原来是这样呀  阅读(19)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起