zoukankan      html  css  js  c++  java
  • 前序遍历 排序 二叉搜索树 递归函数的数学定义 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(' 前序遍历0,1,2,3,6,11,12,14,13,15,16')
    root.preorder_traversal()
    print(' 中序遍历12,6,3,1,0,2,11,14,13,15,16')
    root.inorder_traversal()
    print(' 后序遍历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(' ')
    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] 


  • 相关阅读:
    MVC5+EF6简单实例以原有SQLServer数据库两表联合查询为例
    ArcGIS生成根据点图层生成等值面并减小栅格锯齿的操作步骤
    EF6+MVC5之Oracleo数据库的Code First方式实现
    jquery写的tab切换效果 非常简单
    APP消息推送是否进入消息中心和click、receive事件分析
    Android APP切换到后台接收不到推送消息
    js写的简单轮播图
    凉凉的笔记 two day
    凉凉的笔记 one.day
    在SQL Server数据库中批量导入数据的四种方法
  • 原文地址:https://www.cnblogs.com/rsapaper/p/10510942.html
Copyright © 2011-2022 走看看