了解二叉树
Posted 智慧大数据
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了了解二叉树相关的知识,希望对你有一定的参考价值。
一、二叉树的种类
1、满二叉树
0
0 0
0 0 0 0
满二叉树深度为2^k-1,例子即为3
2、完全二叉树
完全二叉路底层不一定满,但节点一定是从左到右连续的。
下面是一个完全二叉树
0
0 0
0 0 0 0
0 0 0 0
下面不是一个完全二叉树
0
0 0
0 0 0 0
0 0 0 0
3、二叉搜索树
二叉搜索树对于树的结构没有要求,但是对于树的元素必须保证有规律,规律一般为左子树或节点都小于他的父节点,右子树或节点都大于他的父节点,时间复杂度为O(logN)级别。
6
3 9
1 4 8 10
4、平衡二叉搜索树
左子树和右子树高度的绝对值不能超过1,一般map、set都是用平衡二叉搜索树。
下面不是一个平衡二叉搜索树:
6
3
1 4
下面是一个平衡二叉搜索树:
6
3 9
1 4
下面是一个平衡二叉搜索树:
6
3 9
1 4 8
下面是一个平衡二叉搜索树:
6
3 9
1 4 8
0
二、二叉树的存储
5、链式存储
6、线型存储
左节点为2i+1,右节点为2i+2
三、二叉树的遍历
7、深度优先搜索
我们普通使用到前序、中序、后序搜索算法都属于深度优先算法,一般使用迭代或递归实现搜索算法。
5
4 6
1 2 7 8
前序遍历(中–>左–>右):5,4,1,2,6,7,8
中序遍历(左–>中–>右):1,4,2,5,7,6,8
后序遍历(左–>右–>中):1,2,4,7,8,6,5
8、广度优先搜索
一层一层或者一圈一圈的去遍历,即层序遍历,迭代法;
四、二叉树的定义
c++
struct TreeNode{
int val;
TreeNode* Left;
TreeNode* Right;
//构造函数
TreeNode(int t){
this->val=t;
this->Left=Null;
this->right=Null;
}
};
golang
type TreeNode struct {
Value int
Left , Right *TreeNode
}
以上是关于了解二叉树的主要内容,如果未能解决你的问题,请参考以下文章