持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第5天,点击查看活动详情
二分搜索树
二分搜索树
树结构
树的特点就是方便高效,
- 将数据使用树结构存储给 ,出奇的高效
二叉树
- 和链表一样动态的数据结构
- 每个节点最多只能有两个分支
function TreeNode(){
this.val = null;
this.left = null;
this.right = null;
}
-
二叉树每个节点最多有两个孩子
-
二叉树每个节点最多有一个父亲
-
二叉树具有天然的递归结构
- 每一个节点的左子树也是二叉树
- 每一个节点的右子树也是一个二叉树
二叉树的递归遍历
前序遍历
var preorderTraversal = function(root) {
let res=[];
const dfs=function(root){
if(root===null)return ;
//先序遍历所以从父节点开始
res.push(root.val);
//递归左子树
dfs(root.left);
//递归右子树
dfs(root.right);
}
//只使用一个参数 使用闭包进行存储结果
dfs(root);
return res;
};
中序遍历
var inorderTraversal = function(root) {
let res=[];
const dfs=function(root){
if(root===null){
return ;
}
dfs(root.left);
res.push(root.val);
dfs(root.right);
}
dfs(root);
return res;
};
后序遍历
var postorderTraversal = function(root) {
let res=[];
const dfs=function(root){
if(root===null){
return ;
}
dfs(root.left);
dfs(root.right);
res.push(root.val);
}
dfs(root);
return res;
};
三种遍历都只是有小部分不同
树的遍历很容易找到递归的基本结果,和每一个小的单元,看起来还是很容易的
二叉树的层序遍历
层序遍历就是一层一层的将树中的元素输出出来
对于层序遍历需要借用一个辅助数据结构即队列来实现,队列先进先出,符合一层一层遍历的逻辑,而是用栈先进后出适合模拟深度优先遍历也就是递归的逻辑。
代码实现
[代码随想录] www.programmercarl.com
逻辑也不是很复杂,同时还有很多相关的拓展算法题,可以巩固层序遍历的知识。
相关算法
反转二叉树
使用了递归和前序遍历的方法,一个节点一个节点的去反转树。实现功能
算法待补充......
二分搜索树
-
二分搜索树也是二叉树
-
二分搜索树的每个节点的值:
- 大于其左子树的所有节点的值
- 小于其右子树的所有节点的值
- 存储的元素具有可比较性