python-树-BST_Traversal-二叉搜索树的遍历
写一个函数,函数的输入是一个二叉搜索树BST和一个array。
函数可以按照要求将便利的结果放进array中,然后进行输出。
有一个树状结构:
10/ \5 15/ \ \2 5 22/1
遍历方法
中序遍历:[1,2,5,5,10,15,22] 指先访问左(右)子树,然后访问根,最后访问右(左)子树的遍历方式
前序遍历:[10, 5, 2, 1, 5, 15, 22]指先访问根,然后访问子树的遍历方式
后序遍历:[1, 2, 5, 5, 22, 15, 10]指先访问子树,然后访问根的遍历方式
1.1深度优先遍历
- 1.1.1前序遍历(Pre-Order Traversal)
- 1.1.2中序遍历(In-Order Traversal)
- 1.1.3后序遍历(Post-Order Traversal)
def inOrderTraverse(tree, array):if tree is not None:inOrderTraverse(tree.left,array)array.append(tree.value)inOrderTraverse(tree.right,array)return arraydef preOrderTraverse(tree, array):if tree is not None:array.append(tree.value)preOrderTraverse(tree.left,array)preOrderTraverse(tree.right,array)return arraydef postOrderTraverse(tree, array):if tree is not None:postOrderTraverse(tree.left,array)postOrderTraverse(tree.right,array)array.append(tree.value)return arrayclass Tree:def __init__(self,value = None,left = None,right = None):self.value = valueself.right = rightself.left = left
node_1 = Tree(value = 10)
node_2 = Tree(value = 5)
node_3 = Tree(value = 15)
node_4 = Tree(value = 2)
node_5 = Tree(value = 5)
node_6 = Tree(value = 22)
node_7 = Tree(value = 1)node_1.left = node_2
node_1.right = node_3
node_2.left = node_4
node_2.right = node_5
node_3.right = node_6
node_4.left = node_7array_recorder =[]
print(f"inOrderTraverse: {inOrderTraverse(tree = node_1, array = array_recorder)}")
array_recorder =[]
print(f"preOrderTraverse: {preOrderTraverse(tree = node_1, array = array_recorder)}")
array_recorder =[]
print(f"postOrderTraverse: {postOrderTraverse(tree = node_1, array = array_recorder)}")### Time: O(n)
### Space: O(n)
输出
inOrderTraverse: [1, 2, 5, 5, 10, 15, 22]
preOrderTraverse: [10, 5, 2, 1, 5, 15, 22]
postOrderTraverse: [1, 2, 5, 5, 22, 15, 10]
[Finished in 0.6s]
Time: O(n)
Space: O(n)
python-树-BST_Traversal-二叉搜索树的遍历相关推荐
- 树形结构:二叉排列树,二叉搜索树
二叉排列树,二叉搜索树 这个数听见得比较多,含义是:左边<=中间<=右边,换句话来说使用中序遍历最后得到结果就是一个有序得序列. 建立一颗二叉排列树 class BinTNode:def ...
- (一)BST树(二叉搜索树)
(一)BST树(二叉搜索树) 1.BST二叉搜索树 1.1BST树的定义 1 BST树也是一个二叉树,故满足递归定义; 2 其次每个节点只存在一个值; 3 需满足左子树值<=根值<=右子树 ...
- 利用C语言实现二叉搜索树的遍历、查找、插入、删除
IDE:codebloks,编译器:gcc5.1.0 二叉搜索树和我们通常的二叉树还是有一定的区别,顾名思义,一颗二叉搜索树以一颗二叉树来组织,其中每一个结点就是一个对象.除了key(关键字)和卫星数 ...
- 数据结构(三):非线性逻辑结构-特殊的二叉树结构:堆、哈夫曼树、二叉搜索树、平衡二叉搜索树、红黑树、线索二叉树
在上一篇数据结构的博文<数据结构(三):非线性逻辑结构-二叉树>中已经对二叉树的概念.遍历等基本的概念和操作进行了介绍.本篇博文主要介绍几个特殊的二叉树,堆.哈夫曼树.二叉搜索树.平衡二叉 ...
- 五.树,二叉树,二叉搜索树(BST)和自平衡二叉搜索树(AVL)
1.树 树是一种数据结构 比如:目录结构 树是一种可以递归定义的数据结构 树是由n个节点组成的集合: 如果 n=0, 那这是一颗空树 如果 n>0, 那存在1个节点作为树的根节点,其他节点可以分 ...
- 【CCCC】L2-004 这是二叉搜索树吗? (25分),二叉搜索树前序遍历
problem L2-004 这是二叉搜索树吗? (25分) 一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点, 其左子树中所有结点的键值小于该结点的键值: 其右子树中所有结点的键值大 ...
- 算法 树7 二叉搜索树的操作集
全部每周作业和视频思考题答案和解析 见 浙江大学 数据结构 思考题+每周练习答案汇总 题目:本题要求实现给定二叉搜索树的5种常用操作. 函数接口定义: BinTree Insert( BinTree ...
- 数据结构--伸展树(伸展树构建二叉搜索树)-学习笔记
2019/7/16更新:封装SplayTree进入class:例题:http://poj.org/problem?id=3622 一个伸展树的板子: #include<stdio.h> # ...
- leetcode 98. 验证二叉搜索树 递归遍历左右子树和中序遍历 c语言解法
如题: 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右子树自身必须也是 ...
- 刷题笔记(1) 一个序列是否为二叉搜索树的遍历结果
1.输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 二叉搜索树:具体定义:https://blog.csdn ...
最新文章
- 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 修改 7zr 交叉编译脚本 Android.mk | 交叉编译 lib7zr.so 动态库 )
- python第7章实训作业_试图学Python赚外快的第7天
- iOS Hacker LLDB 和 debugserver 实例调试
- 方立勋_30天掌握JavaWeb_JSP
- 容器的综合应用:文本查询程序
- 精讲23种设计模式-策略模式~聚合短信服务和聚合支付服务
- 信息奥赛一本通(1231:最小新整数)
- Castle动态代理拦截器可跟踪模型更改和触发规则
- js html utf8编码转换,js中的UTF-8编码与解码
- 阿里云基础产品技术月刊 2018年12月
- parallels恢复linux密码,在Parallels Desktop中忘记Windows密码怎么办 Parallels Desktop忘记Windows密码的解决方法...
- 个人记账系统c语言,C#实现_______个人记账程序
- 第一章 spss入门
- 软通动力华为外包_软通动力外包到百度?
- 使用计算机键盘的基本步骤,电脑如何用键盘开机_台式电脑键盘开机方法-win7之家...
- Python--正则表达式处理文本
- 2023款16英寸苹果MacBook Pro续航实测
- leetcode 121. 买卖股票的最佳时机 (贪心 + 动规 + 双指针
- 渗透服务器修改数据,渗透测试之:从端口入侵服务器
- android计时器
热门文章
- 如何取悦自己或者增加自己幸福感的方式
- 任务队列:celery快速入门及django中celery的用法
- 极速狂飙 无线网BT下载使用技巧全攻略
- iOS16.0:屏幕旋转
- webscraper 爬取二级网页_web scraper 入门到精通之路
- 迪文串口屏幕DMG10600T101_01WTR实现图片切换并和串口通讯
- 百度文字识别官方Demo
- 用python一键生成动画(上)
- MySQL中 begin 事务 begin ,第二个begin带自动提交功能???
- NtripShare OpenSource/NtripShare GNSS共享计划 -- JT808终端模拟器源码(四)