图解二叉树+手撸二叉树代码--腾讯数据结构面试题

本文通过图解和实例介绍了二叉树的基本概念,包括满二叉树、完全二叉树,以及二叉树的前序、中序、后序遍历。并提供了链表实现二叉树的代码示例,同时讨论了腾讯面试中关于链表节点删除的算法问题。
摘要由CSDN通过智能技术生成

本期脑图:

图片

一 前言:

上一期数据结构与算法小结2 撸了单向链表代码,是作为本篇的基础,其中一个核心思路都很重要:递归,可以说掌握了递归,基本上手动实现这些数据结构就已经成功了一半;

    本期开始手撸代码模拟二叉树的遍历;

二 基本常识铺垫:

2.1 什么是树?

    树是n(n大于等于0)个有限元素的集合:

        1.n=0 时为空树

        2.n>0 时:有且仅有一个称为根(root)的元素及m个(m>0)不相交的有限集合组成,每一个有限集合也可以看做是子树。

        3.节点:在树中,一个元素也称作一个节点

2.1.1  为什么树结构很重要?

        在查询操作上,以及在维持相对顺序上,树结构比链表有优势,而且树结构是生活中非常常见的结构,很多生活中的事务都可以用树结构来表示,你能想到有哪些生活的例子符合上面三个特点呢?

案例1  家族族谱:

图片

案例2 产品功能分区:

图片

案例3 和大家学习息息相关的目录

图片

一图胜百字!以上包括第一张脑图结构都可以说是树结构;

    关于树的应用(查找+维持相对顺序),我之前举例子写过mysql索引的结构,就涉及到了树结构;看完本篇,可以挑战阅读一下:

学习笔记--mysql索引底层数据结构_StefanSSSS的博客-CSDN博客

2.2 什么是二叉树?

        顾名思义,一个节点有且最多有左右两个节点的树结构;

        2.2.1 请指出下图中哪些是二叉树呢?且找出他们的根节点,叶子节点;

图片

图片

图片

Here 's the answer !!!No picture ,Say 个J8;

以上这些都是二叉树,只不过有的是完全二叉树,有的是满二叉树,有的是非完全二叉树;

哪里是 根节点,叶子节点以及子树呢?

如图。(一张图抵得上度娘100字官方解释);

图片

2.2.2  什么是满二叉树?

        首先:一个二叉树节点如果有两个左右子节点,左边的为左孩子节点,右边的为右孩子节点:(如图)

图片

满二叉树则是每一个非叶子节点都有左右孩子,且所有的叶子节点都在相同一个层级上;

    那么上面这个图明显不是满二叉树,节点6没有右子节点,那么你可以补充一下使之变成满二叉树吗?走一个

图片

2.2.3 什么是完全二叉树?

        来自度娘:一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。 

        反正我是没看懂!

        还是举例子吧:

    首先,先来一个满二叉树,想要满足完全二叉树的要求,就必须按照

同一层级从右往左,不同层级从下往上按顺序舍掉,不能跳序;满足这个就算完全二叉树;

图片

比如上图右树是满二叉树,左树是右树在第三层按从右到左的顺序拆掉一个,So 左树是一个完全二叉树

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值