前序遍历 排序 二叉搜索树 递归函数的数学定义 return 递归函数不能定义为内联函数 f(x0)由f(f(x0))决定
遍历二叉树 traversing binary tree 线索二叉树 threaded binary tree 线索链表 线索化
1、
二叉树3个基本单元组成:根节点、左子树、右子树
以L、D、R分别表示遍历左子树、访问根节点、遍历右子树
可能的情况6种
排列A3 2
LDR LRD
DLR DRL
RLD RDL
若限定先左后右
LDR LRD 中根序遍历 后根序遍历
DLR 先根序遍历
先/中/后 序遍历
class Node:
def __init__(self, data):
self.left = None
self.right = None
self.data = data
def insert(self, data):
if self.data is None:
self.data = data
else:
if data < self.data:
if self.left is None:
self.left = Node(data)
else:
self.left.insert(data)
elif data == self.data:
pass
else:
if self.right is None:
self.right = Node(data)
else:
self.right.insert(data)
def find(self, data):
'''
???
:param data:
:return:
'''
cmp_data = self.data
if data < cmp_data:
if self.left:
return self.left.find(data)
elif data == cmp_data:
return True
else:
if self.right:
return self.right.find(data)
return False
def preorder_traversal(self):
'''
前序遍历
:return:
'''
if self.left:
self.left.preorder_traversal()
print(self.data, end=',')
if self.right:
self.right.preorder_traversal()
def inorder_traversal(self):
'''
中序遍历
:return:
'''
print(self.data, end=',')
if self.left:
self.left.inorder_traversal()
if self.right:
self.right.inorder_traversal()
def postorder_traversal(self):
'''
后序遍历
:return:
'''
if self.left:
self.left.postorder_traversal()
if self.right:
self.right.postorder_traversal()
print(self.data, end=',')
root = Node(12)
root.insert(6)
root.insert(14)
root.insert(3)
root.insert(1)
root.insert(11)
root.insert(15)
root.insert(13)
root.insert(2)
root.insert(0)
root.insert(16)
print('\n前序遍历0,1,2,3,6,11,12,14,13,15,16')
root.preorder_traversal()
print('\n中序遍历12,6,3,1,0,2,11,14,13,15,16')
root.inorder_traversal()
print('\n后序遍历0,2,1,3,11,6,13,16,15,14,12')
root.postorder_traversal()
'''
12
6 14
3 11 13 15
1 16
0 2
'''
print('\n')
for i in [3, 5, 15, 7, 0, -1]:
print('i', i)
r = root.find(i)
前序遍历0,1,2,3,6,11,12,14,13,15,16
0,1,2,3,6,11,12,13,14,15,16,
中序遍历12,6,3,1,0,2,11,14,13,15,16
12,6,3,1,0,2,11,14,13,15,16,
后序遍历0,2,1,3,11,6,13,16,15,14,12
0,2,1,3,11,6,13,16,15,14,12,
中序遍历的结果是升序排列
递归中的return
https://baike.baidu.com/item/递归函数/5634537?fr=aladdin
https://baike.baidu.com/item/二叉搜索树
二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。二叉搜索树作为一种经典的数据结构,它既有链表的快速插入与删除操作的特点,又有数组快速查找的优势;所以应用十分广泛,例如在文件系统和数据库系统一般会采用这种数据结构进行高效率的排序与检索操作。 [1]
前序遍历 排序 二叉搜索树 递归函数的数学定义 return 递归函数不能定义为内联函数 f(x0)由f(f(x0))决定的更多相关文章
- PAT 1043 Is It a Binary Search Tree (25分) 由前序遍历得到二叉搜索树的后序遍历
题目 A Binary Search Tree (BST) is recursively defined as a binary tree which has the following proper ...
- L2-004 这是二叉搜索树吗? (25 分) (树)
链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805070971912192 题目: 一棵二叉搜索树可被递归地定义为 ...
- pta l2-4(这是二叉搜索树吗?)
题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805070971912192 题意:给定n以及n个整数,问该序列 ...
- 【遍历二叉树】07恢复二叉搜索树【Recover Binary Search Tree】
开一个指针数组,中序遍历这个二叉搜索树,将节点的指针依次保存在数组里, 然后寻找两处逆序的位置, 中序便利里BST得到的是升序序列 ++++++++++++++++++++++++++++++++++ ...
- 二叉树系列 - 二叉搜索树 - [LeetCode] 中序遍历中利用 pre节点避免额外空间。题:Recover Binary Search Tree,Validate Binary Search Tree
二叉搜索树是常用的概念,它的定义如下: The left subtree of a node contains only nodes with keys less than the node's ke ...
- 每日一题 - 剑指 Offer 33. 二叉搜索树的后序遍历序列
题目信息 时间: 2019-06-26 题目链接:Leetcode tag:分治算法 递归 难易程度:中等 题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 tr ...
- 二叉搜索树 & 二叉树 & 遍历方法
二叉搜索树 & 二叉树 & 遍历方法 二叉搜索树 BST / binary search tree https://en.wikipedia.org/wiki/Binary_searc ...
- 二叉搜索树的第k大的节点
题目 给定一颗二叉搜索树,请找出其中的第k大的结点. 思路 如果中序遍历一棵二叉搜索树,遍历序列的数值则是递增排序,因此只需中序遍历一个二叉搜索树即可. #include <iostream&g ...
- 【二叉搜索树】PAT-天梯赛- L2-004. 这是二叉搜索树吗?
大致题意: 一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点, 其左子树中所有结点的键值小于该结点的键值: 其右子树中所有结点的键值大于等于该结点的键值: 其左右子树 ...
随机推荐
- MacOS下解决宿主机和docker容器之间网络互通
docker在Mac下使用非常方便,官网提供了desktop版本的可视化软件,甚至还十分贴心地集成好了k8s套件.然而如果想同时部署和使用多个容器,每个容器不使用127.0.0.1地址,而是各自有ip ...
- 使用ajax请求上传多个或者多个附件
jsp页面 <%@ page language="java" pageEncoding="UTF-8"%> <!DOCTYPE HTML> ...
- 根据来源编号对明细进行分组 跟库存做对比 用到的技术 list根据某个字段分组 Double Long 比较大小
public R startProcess(@RequestBody ShouldCredentialPayable bean) { System.out.println("应付贷项参数be ...
- svn怎么上传文件
首先去网站下载TortoiseSVN,并安装 安装完后随便打开一个文件夹,如图,笔者在 E:\svn\ 文件下创建了一个simbo文件夹,选中并右键,出现了TortoiseSVN应用的选项,我们点 ...
- 浅谈IAT加密原理及过程
上一次做完代码段加密后,又接触到了新的加密方式:IAT加密 IAT加密是通过隐藏程序的导入表信息,以达到增加分析程序的难度.因为没有导入表,就无法单纯的从静态状态下分析调用了什么函数,动态调试时,也无 ...
- Android Studio连接手机调试教程已决解
Android Studio连接手机调试教程 Windows电脑连接安卓手机需要下载安装驱动,确保电脑联上网络. 准备条件: 1.电脑上安装应用宝软件. 2.手机开发者选项里面打开USB调试,USB安 ...
- JSP 的 4 种作用域?
page:代表与一个页面相关的对象和属性. request:代表与客户端发出的一个请求相关的对象和属性.一个请求可能跨越多个页面,涉及多个 Web 组件:需要在页面显示的临时数据可以置于此作用域. s ...
- Linux性能优化:CPU性能分析工具--vmstat
Blog:博客园 个人 目录 参数说明 输出信息说明 procs memory swap io system cpu 示例 vmstat是Virtual Meomory Statistics(虚拟内存 ...
- JAVADOC 文档注释命令
简介 javadoc命令是用来生成自己API文档的 javadoc参数信息 @author 作者名 @version 版本号 @since 指明需要最早使用的jdk版本 @param 参数名 @ret ...
- 关于opcache中opcache.revalidate_freq参数设置测试报告
1.测试目的: 测试出opcache中,opcache.revalidate_freq这个参数最适合的大小 说明:如果opcache.revalidate_freq参数越大,服务器单位时间能接收的请求 ...