写一个函数,函数的输入是一个二叉搜索树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-二叉搜索树的遍历相关推荐

  1. 树形结构:二叉排列树,二叉搜索树

    二叉排列树,二叉搜索树 这个数听见得比较多,含义是:左边<=中间<=右边,换句话来说使用中序遍历最后得到结果就是一个有序得序列. 建立一颗二叉排列树 class BinTNode:def ...

  2. (一)BST树(二叉搜索树)

    (一)BST树(二叉搜索树) 1.BST二叉搜索树 1.1BST树的定义 1 BST树也是一个二叉树,故满足递归定义; 2 其次每个节点只存在一个值; 3 需满足左子树值<=根值<=右子树 ...

  3. 利用C语言实现二叉搜索树的遍历、查找、插入、删除

    IDE:codebloks,编译器:gcc5.1.0 二叉搜索树和我们通常的二叉树还是有一定的区别,顾名思义,一颗二叉搜索树以一颗二叉树来组织,其中每一个结点就是一个对象.除了key(关键字)和卫星数 ...

  4. 数据结构(三):非线性逻辑结构-特殊的二叉树结构:堆、哈夫曼树、二叉搜索树、平衡二叉搜索树、红黑树、线索二叉树

    在上一篇数据结构的博文<数据结构(三):非线性逻辑结构-二叉树>中已经对二叉树的概念.遍历等基本的概念和操作进行了介绍.本篇博文主要介绍几个特殊的二叉树,堆.哈夫曼树.二叉搜索树.平衡二叉 ...

  5. 五.树,二叉树,二叉搜索树(BST)和自平衡二叉搜索树(AVL)

    1.树 树是一种数据结构 比如:目录结构 树是一种可以递归定义的数据结构 树是由n个节点组成的集合: 如果 n=0, 那这是一颗空树 如果 n>0, 那存在1个节点作为树的根节点,其他节点可以分 ...

  6. 【CCCC】L2-004 这是二叉搜索树吗? (25分),二叉搜索树前序遍历

    problem L2-004 这是二叉搜索树吗? (25分) 一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点, 其左子树中所有结点的键值小于该结点的键值: 其右子树中所有结点的键值大 ...

  7. 算法 树7 二叉搜索树的操作集

    全部每周作业和视频思考题答案和解析 见 浙江大学 数据结构 思考题+每周练习答案汇总 题目:本题要求实现给定二叉搜索树的5种常用操作. 函数接口定义: BinTree Insert( BinTree ...

  8. 数据结构--伸展树(伸展树构建二叉搜索树)-学习笔记

    2019/7/16更新:封装SplayTree进入class:例题:http://poj.org/problem?id=3622 一个伸展树的板子: #include<stdio.h> # ...

  9. leetcode 98. 验证二叉搜索树 递归遍历左右子树和中序遍历 c语言解法

    如题: 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右子树自身必须也是 ...

  10. 刷题笔记(1) 一个序列是否为二叉搜索树的遍历结果

    1.输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 二叉搜索树:具体定义:https://blog.csdn ...

最新文章

  1. 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 修改 7zr 交叉编译脚本 Android.mk | 交叉编译 lib7zr.so 动态库 )
  2. python第7章实训作业_试图学Python赚外快的第7天
  3. iOS Hacker LLDB 和 debugserver 实例调试
  4. 方立勋_30天掌握JavaWeb_JSP
  5. 容器的综合应用:文本查询程序
  6. 精讲23种设计模式-策略模式~聚合短信服务和聚合支付服务
  7. 信息奥赛一本通(1231:最小新整数)
  8. Castle动态代理拦截器可跟踪模型更改和触发规则
  9. js html utf8编码转换,js中的UTF-8编码与解码
  10. 阿里云基础产品技术月刊 2018年12月
  11. parallels恢复linux密码,在Parallels Desktop中忘记Windows密码怎么办 Parallels Desktop忘记Windows密码的解决方法...
  12. 个人记账系统c语言,C#实现_______个人记账程序
  13. 第一章 spss入门
  14. 软通动力华为外包_软通动力外包到百度?
  15. 使用计算机键盘的基本步骤,电脑如何用键盘开机_台式电脑键盘开机方法-win7之家...
  16. Python--正则表达式处理文本
  17. 2023款16英寸苹果MacBook Pro续航实测
  18. leetcode 121. 买卖股票的最佳时机 (贪心 + 动规 + 双指针
  19. 渗透服务器修改数据,渗透测试之:从端口入侵服务器
  20. android计时器

热门文章

  1. 如何取悦自己或者增加自己幸福感的方式
  2. 任务队列:celery快速入门及django中celery的用法
  3. 极速狂飙 无线网BT下载使用技巧全攻略
  4. iOS16.0:屏幕旋转
  5. webscraper 爬取二级网页_web scraper 入门到精通之路
  6. 迪文串口屏幕DMG10600T101_01WTR实现图片切换并和串口通讯
  7. 百度文字识别官方Demo
  8. 用python一键生成动画(上)
  9. MySQL中 begin 事务 begin ,第二个begin带自动提交功能???
  10. NtripShare OpenSource/NtripShare GNSS共享计划 -- JT808终端模拟器源码(四)