数据结构--二叉树

1. 树基本概念:

  • 根节点(root)、叶节点(leaf)、儿子(child)、父亲(parent)、兄弟(sibling)、祖父(grandparent)、孙子(grandchild)、边(edge)、路径(path)
  • 路径的长(length):路径上边的条数。
  • 祖先(ancestor)和后裔(descendant):存在节点a到节点b的一条路径a –> b,则a是b的祖先,b是a的后裔。
  • 真祖先(proper ancestor)和真后裔(proper descendant):a != b且存在节点a到节点b的一条路径a –> b,则a是b的真祖先,b是a的真后裔。
  • 节点的深度(depth):节点a的深度为从根节点到a节点的唯一路径(path)的长。根节点的深度是0。需要注意的是路径的长,不是节点的个数。
  • 节点的高度(height):节点a的高度是节点a到一片树叶(只能往下看,不能回溯)的最长路径的长。所有叶节点的height都是0。同样的,定义的是路径的长,不是节点的个数。

2. 二叉树的定义及遍历

这里写图片描述

struct TreeNode {
    int            val;
    TreeNode*    left;
    TreeNode*    right;
    TreeNode(int x): val(x), left(NULL),right(NULL) {}
};

3. 二叉树的遍历

3.1. 二叉树的前序遍历(深度优先遍历DFS)

遍历顺序:父节点 –> 左孩子 –> 右孩子
实现细节见我之前写的LeetCode题解,里面有详细解答,包括递归实现、迭代实现、线索二叉树实现。
[LeetCode]144. Binary Tree Preorder Traversal–二叉树前序遍历

3.2. 二叉树的中序遍历(深度优先遍历DFS)

遍历顺序:左孩子 –> 父节点 –> 右孩子
实现细节见我之前写的LeetCode题解
[LeetCode]94. Binary Tree Inorder Traversal–二叉树的中序遍历

3.3. 二叉树的后序遍历(深度优先遍历DFS)

遍历顺序:左孩子 –> 右孩子 –> 父节点
实现细节见我之前写的LeetCode题解
[LeetCode]145. Binary Tree Postorder Traversal–二叉树的后序遍历

3.4. 二叉树的层序遍历(宽度优先遍历WFS)

[LeetCode]102. Binary Tree Level Order Traversal–二叉树层序遍历1
[LeetCode]107. Binary Tree Level Order Traversal II–二叉树层序遍历2
[LeetCode]103. Binary Tree Zigzag Level Order Traversal–二叉树之字形遍历

3.5. 表达式树

这里写图片描述
表达式树(expression tree):表达式树的树叶是操作数(operand),比如常量或变量;其他的节点为操作符(operator)。
根据不同的遍历顺产生不同的表达式。
前缀表达式(前序遍历):++a*bc*+*defg
中缀表达式(中序遍历):a+b*c+d*e+f*g
后缀表达式(后序遍历):abc*+de*f+g*+
后缀表达式也叫逆波兰表达式。

  1. Evaluate Reverse Polish Notation

4. 二叉搜索树/二叉查找树(Binary Search Tree)的定义

5. 二叉搜索树/二叉查找树的基本操作:

5.1. 清空:make_empty
5.2. 插入:insert
5.3. 查找:find
5.4. 查找最小元素:find_min
5.5. 查找最大元素:find_max
5.6. 删除:delete
5.7. 时间复杂度/空间复杂度的分析

6. AVL树定义

6.1 单旋转
6.2 双旋转

7. 伸展树

8. B-树

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值