遍历二叉树   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

编程语言中,函数Func(Type a,……)直接或间接调用函数本身,则该函数称为递归函数。递归函数不能定义为内联函数。
在数学上,关于递归函数的定义如下:对于某一函数f(x),其定义域是集合A,那么若对于A集合中的某一个值X0,其函数值f(x0)由f(f(x0))决定,那么就称f(x)为递归函数。
 
 
 

https://baike.baidu.com/item/二叉搜索树

二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。二叉搜索树作为一种经典的数据结构,它既有链表的快速插入与删除操作的特点,又有数组快速查找的优势;所以应用十分广泛,例如在文件系统和数据库系统一般会采用这种数据结构进行高效率的排序与检索操作。 [1] 

前序遍历 排序 二叉搜索树 递归函数的数学定义 return 递归函数不能定义为内联函数 f(x0)由f(f(x0))决定的更多相关文章

  1. 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 ...

  2. L2-004 这是二叉搜索树吗? (25 分) (树)

    链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805070971912192 题目: 一棵二叉搜索树可被递归地定义为 ...

  3. pta l2-4(这是二叉搜索树吗?)

    题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805070971912192 题意:给定n以及n个整数,问该序列 ...

  4. 【遍历二叉树】07恢复二叉搜索树【Recover Binary Search Tree】

    开一个指针数组,中序遍历这个二叉搜索树,将节点的指针依次保存在数组里, 然后寻找两处逆序的位置, 中序便利里BST得到的是升序序列 ++++++++++++++++++++++++++++++++++ ...

  5. 二叉树系列 - 二叉搜索树 - [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 ...

  6. 每日一题 - 剑指 Offer 33. 二叉搜索树的后序遍历序列

    题目信息 时间: 2019-06-26 题目链接:Leetcode tag:分治算法 递归 难易程度:中等 题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果.如果是则返回 tr ...

  7. 二叉搜索树 & 二叉树 & 遍历方法

    二叉搜索树 & 二叉树 & 遍历方法 二叉搜索树 BST / binary search tree https://en.wikipedia.org/wiki/Binary_searc ...

  8. 二叉搜索树的第k大的节点

    题目 给定一颗二叉搜索树,请找出其中的第k大的结点. 思路 如果中序遍历一棵二叉搜索树,遍历序列的数值则是递增排序,因此只需中序遍历一个二叉搜索树即可. #include <iostream&g ...

  9. 【二叉搜索树】PAT-天梯赛- L2-004. 这是二叉搜索树吗?

    大致题意: 一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点,    其左子树中所有结点的键值小于该结点的键值:    其右子树中所有结点的键值大于等于该结点的键值:    其左右子树 ...

随机推荐

  1. js对flv提取h264、aac音视频流

    FLV提取里面的h264视频流 FLV和MP4支持的编码 流媒体和媒体文件的区别 流媒体是指将一连串的多媒体资料压缩后,经过互联网分段发送资料,在互联网上即时传输影音以供观赏的一种技术与过程,此技术使 ...

  2. 容器编排系统K8s之访问控制--用户认证

    前文我们聊到了k8s的statefulset控制器相关使用说明,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14201103.html:今天我们来聊一下k8 ...

  3. Singleton Pattern -- 不一样的单例模式

    Singleton Pattern -- 单例模式 单例模式是用来创建一个只能又一个实例的对象. 单例模式类图如下. 单例模式有两大好处: (1)对于频繁使用的对象,可以省略创建对象所话费的时间,这对 ...

  4. JavaScript获取页面元素方法

  5. Java学习日报7.14

    package fabs;import java.util.Scanner;public class Fabs { public static void main(String args[]) { S ...

  6. 远程分支删除后,git branch -a还能看到的解决方法

    详情https://www.cnblogs.com/wangiqngpei557/p/6058115.html 大家在删除远程分支后 git branch -a 还是可以看到已删除的远程分支,时间一长 ...

  7. HDFS中大数据常见运维指令总结

    一.查看HDFS下的参数信息 [root@master ~]# hdfs Usage: hdfs [--config confdir] COMMAND where COMMAND is one of: ...

  8. (解决)easypoi图片导出只占用一个单元格

    @ 目录 前提 依赖环境 问题原因 解决方案 重写jar中的方法 原理 前提 本解决方案来源于网络,因解决自己需求,因此自行记录起来,如有侵权请联系我. 依赖环境 easypoi--依赖版本3.1.0 ...

  9. 【C++】《Effective C++》第七章

    第七章 模板与泛型编程 条款41:了解隐式接口和编译期多态 面向对象设计中的类(class)考虑的是显式接口(explict interface)和运行时多态,而模板编程中的模板(template)考 ...

  10. Vue基础语法与指令

    项目初始化 用vscode打开终端,输入npm init -y生成package.json 然后安装vue npm install vue 需要注意的是,我遇到了这个问题 出现原因:文件夹名和生成的p ...