(面试)二叉树 python实现

准备面试,撸了个二叉树python的代码,最后有代码,记录梳理下写的思路:


 

目录

1-利用add创建一个二叉树

2-查询树的节点数

3-查询树的深度

4-前序遍历

5-中序遍历

6-后序遍历

7-层次遍历

8-查询叶子节点数

实验结果


1-利用add创建一个二叉树

这里只做了按照完全二叉树进行构建树,之后会想想办法试着写一个支持非完全二叉树的(还没有思路)

核心思想:设定一个根节点,先设定左子节点在设定右子节点,设定完后表明该层任务结束,在新的节点中按照从左到右的顺序依次设为子节点

完全二叉树构建思路:

  1. 先设定现在的根节点,并将其放入节点列表
  2. 判断根节点的左子节点是否存在,不存在就把左节点更新为该节点,否则更新右节点
  3. 将上述更新的节点进行保存,如果上述更新的是右节点,证明该根节点已经完成任务,在节点列表中移除
  4. 将根节点设为节点列表中的第一个节点重复第一步

该方法就是每次增加一个节点需要遍历整棵树,然后再添加,优化办法是在类属性中加一个nowNode的选项保存最后一个节点

2-查询树的节点数

核心思想:每一次见到非空根节点先+1,这样保证记录所有根(父)节点的个数,记录下父节点的个数后,只剩下叶子节点没被记录下来,再记录下叶子节点的个数即可

  1. 空节点返回0
  2. 根节点不空就先+1
  3. 检查到叶子节点+1
  4. 采用递归法,分别查询左右树

3-查询树的深度

核心思想:每到一个根(父)节点,就将层数+1,并搜索该根(父)节点的左右子节点,如果子节点为空说明,该节点为叶子节点,返回当前的深度,然后返回每个根(父)节点下,左右树的深度最大值即可,注意,这里的深度作为一个参数在迭代过程中作为参数一直被记录。

  1. 节点为空就返回深度值
  2. 节点不为空就,深度+1
  3. 遍历左右树的深度值
  4. 返回左右树深度的最大值

4-前序遍历

前序遍历:根节点->左节点->右节点

核心思想:一直递归查询左节点是否存在,如果左节点存在就说明该节点是根(父)节点,则保存该值,如果是叶子节点,在保存该值的基础上,还要返回查询的结果,说明左边查询已经到底 (左节点和父节点查询完毕),返回到上一级刚好迭代查询右节点即可

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值