| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> [数据结构] python 二叉搜索树(BST树)的插入 -> 正文阅读 |
|
[数据结构与算法][数据结构] python 二叉搜索树(BST树)的插入 |
一、概念 二叉搜索树(Binary Search Tree)是一颗二叉树且满足性质:设x是二叉树的一个节点。如果y树x左子树的一个节点,那么;如果y是x右子树的一个节点,那么。 用通俗一点的话来说就是在一棵二叉树中,左子树所有节点都比它的根节点小,右子树所有节点都比它的根节点大。(如图所示) 所以当我们要定义一个BST树时,用双链表来做就要想到要初始化的东西: 1. 数据域data 0 2. 树的左孩子和右孩子(lchild/rchild)? 3. 他们的双亲parent 定义BST树代码如下:
?二、搜索二叉树的插入 递归插入代码思路: 1. 判断当前节点是否为空,是的话就直接插入结点 2. 如果当前节点不为空,则有三种判断 当前节点大于插入的结点,插入的结点应放在当前结点的左边 当前节点小于插入的结点,插入的结点应放在当前节点的右边 当前节点等于插入的结点,这个代码可以不执行,可以不写,如果想优化代码可以写如果当前及诶点等于插入的结点会怎样怎样 3. 最后别忘了绑定要插入的结点的双亲 代码如下:
非递归插入代码思路如下: 1. 定义一个变量来保存这棵树的根 2. 判断该树是否为空,判断方法为判断根是否存在,如果是空,直接将要插入的结点插入根节点 3. 不是空树,则有三种判断 当前节点大于根节点,插入的结点应放在根节点的左边,所以要判断根节点有没有左子树,有左子树的话就再找它的左子树的下一个左子树,直到找到空节点进行插入 当前节点小于根节点,插入的结点应放在根节点的右边,所以要判断根节点有没有右子树,有右子树的话就再找它的右子树的下一个右子树,直到找到空节点进行插入 当前节点等于插入的结点,代码可以不写,也可以写,这里不写 代码如下:
总体代码如下: 因为递归执行效率较慢,所以改代码使用非递归执行,因为再创建了另一个类,所以需要初始化一下树的根
结果输出为:
可以看出,BST树的中序遍历一定是顺序的,记住这不是巧合就行 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 5:53:30- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |