[TOC]
# 为什么有树结构?
![](https://box.kancloud.cn/37d2961d64dd617b180c58f77d3779c1_818x1000.png)
![](https://box.kancloud.cn/87c16384680729e4fad4ccf515440a4a_1450x1216.png)
![](https://box.kancloud.cn/cc02b3522bfcae372d5930c0342e853c_2080x1048.png)
# 二叉树
![](https://box.kancloud.cn/2eca627b68e482d0878b5ee2d03b21b1_2924x1090.png)
![](https://box.kancloud.cn/4389a2d33d08032453b6fbd6df326f94_2908x1106.png)
二叉树不一定是满的,叶子节点有可能只有1个
一个根节点也可以是二叉树
null也可以是二叉树
# 二分搜索树(BST)
![](https://box.kancloud.cn/ccdb101f5f5fd32ef8f92da30028fd52_2880x1132.png)
存储的元素必须具有可比较性
# 遍历
前序遍历(先访问节点,再访问左右子树)
中序遍历(先访问左子树或者右子树,再访问根节点,再访问其他节点)(二分搜索树的中序遍历结果是顺序的)
后序遍历(先遍历左右子树再遍历根节点)(应用,为二分搜索树释放内存)
## 前序遍历,递归
![](https://box.kancloud.cn/a7dd2b31d3b0923e9a40e0f63af6124e_1280x671.png)
## 中序遍历,递归
![](https://box.kancloud.cn/0e8cc944d053aa08d74c16534b4e3568_1279x680.png)
## 后序遍历,递归
![](https://box.kancloud.cn/4d7eb3a51a7aea893941a2c395dfffb2_1262x682.png)
## 前序遍历,非递归
利用栈遍历
![](https://box.kancloud.cn/04874b8db5fad3337be2c2f17b0c7bd4_1339x635.png)
## 层序遍历(广度优先)
借助队列
![](https://box.kancloud.cn/c0e2cb7c772beb60fd2b391fa44d9119_1366x620.png)
意义在于可以很快找到你要查找的元素,区别在于搜索策略
常用于最短路径
图中的深度优先遍历和广度优先遍历
# 删除最小值
找左边,直到为null,那就是自己
![](https://box.kancloud.cn/d2366ce3ea09c3fa5da910e2f9825bb2_661x570.png)
# 删除最大值
找右边,直到为null,那就是自己
![](https://box.kancloud.cn/2db9e37dd2092bacfdacfada31e45fff_874x571.png)