前序遍历 排序 二叉搜索树 递归函数的数学定义 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. 这是二叉搜索树吗?
大致题意: 一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点, 其左子树中所有结点的键值小于该结点的键值: 其右子树中所有结点的键值大于等于该结点的键值: 其左右子树 ...
随机推荐
- JavaEE在职加薪课好客租房项目实战视频教程
JavaEE在职加薪课好客租房项目实战视频教程课程介绍: 本课程采用SOA架构思想进行设计,基于目前主流后端技术框架SpringBoot.SpringMVC.Mybaits.Dubbo等来 ...
- 史上最全java里面的锁
什么是锁 在计算机科学中,锁(lock)或互斥(mutex)是一种同步机制,用于在有许多执行线程的环境中强制对资源的访问限制.锁旨在强制实施互斥排他.并发控制策略. 锁通常需要硬件支持才能有效实施.这 ...
- springmvc 统一处理异常
1.自定义统一异常处理器 自定义Exception实现 HandlerExceptionResolver接口或继承AbstractHandlerExceptionResolver类 1.实现接口Han ...
- Mysql 8.0 相关命令
1.dos窗口命令登陆. 管理员/普通用户登陆(账号/密码:root/rootpwd) mysql -hlocalhost -uroot -prootpwd 普通用户登陆(root管理员的不可以使用这 ...
- python实例:解决经典扑克牌游戏 -- 四张牌凑24点 (一)
Hey! Hope you had a great day so far! 今天想和大家讨论的是一道我从这学期cs的期末考试得到灵感的题:Get 24 Poker Game.说到 Get 24 Pok ...
- LVS、Nginx和HAProxy区别
LVS.Nginx和HAProxy区别 LVS 优点: 高并发连接:LVS基于内核网络层面工作,有超强的承载能力和并发处理能力.单台LVS负载均衡器,可支持上万并发连接. 抗负载能力强:是工作在网络4 ...
- 一文详解 ARP 协议
我把自己以往的文章汇总成为了 Github ,欢迎各位大佬 star https://github.com/crisxuan/bestJavaer 公众号连载计算机网络文章如下 ARP,这个隐匿在计网 ...
- phpstorm2020.1最新版永久破解
phpstorm最新安装包以及破解包下载 链接:https://pan.baidu.com/s/177DyhBWP7Lek2IAd-CVJbg 提取码:rhpz 下载安装以及先选择试用什么的傻瓜式操作 ...
- PHP 爬取图片 保存本地
public function getImage($url,$filename='') { if($url == ''){ return false; } if($filename == ''){ $ ...
- 攻防世界_MISC进阶区_Get-the-key.txt(详细)
攻防世界MISC进阶之Get-the-key.txt 啥话也不说,咱们直接看题吧! 首先下载附件看到一个压缩包: 我们直接解压,看到一个文件,也没有后缀名,先用 file 看一下文件属性: 发现是是L ...