首页 > 编程语言 >数据结构与算法-06树及二叉树

数据结构与算法-06树及二叉树

时间:2023-06-07 19:14:51浏览次数:50  
标签:node None 06 cur self 二叉树 rchild 树及

树和二叉树

完全二叉树: 除了最下层,每一层都满了
满二叉树: 每一层都满了
平衡二叉树: 任意两个节点的高度差不大于1
排序二叉树:

链式存储

常见应用场景

  1. xml/html解析
  2. 路由协议
  3. mysql数据库索引
  4. 文件系统结构

二叉树

  1. 在二叉树的第i层上至多有2^(i-1)个结点
  2. 深度为k的二叉树至多有2^k-1个结点
  3. 对于任意一颗二叉树, 如果其叶结点数为N, 则度数为2的节点总数为N+1
  4. 具有n个节点的完全二叉树的深度必为log2(n+1)
  5. 对于完全二叉树, i节点的左孩子变化为2i, 右孩子为2i+1

二叉树的节点表示和树的创建

节点

class Node(object):
    def __init__(self, item):
        self.elem = item
        self.lchild = lchild
        self.rchild = rchild

class Tree(object):
    def __init__(self, root=None):
        self.root = root
        
    def add(self, item):
        node = Node(item)
        if self.root is None
            self.root = node
            return
        else:
        queue = [self.root]
        while queue:
            cur_node = queue.pop(0)
            if cur_node.lchild is None:
                cur_node.lchild = node
                return
            else:
                queue.append(cur_node.lchild)
            if cur_node.rchild is None:
                cur_node.rchild = node
                return
            else:
                queue.append(cur_node.rchild)
                
    # 广度优先遍历
    def breadth_travel(self):
        if self.root is None:
            return
        queue = [self.root]
        while queue:
            cur_node = queuq.pop(0)
            print(cur_node.elem)
            if cur_node.lchild is not None:
                quequ.append(cur_node.lchild)
            if cur_node.rchild is not None:
                queue.append(rchild)
                
    # 先序遍历
    def preorder(self, node):
        if node is None:
            return
        print(node.elem)
        self.preorder(node.lchild)
        self.preorder(node.rchild)
        
    # 中序遍历
    def inorder(self, node):
        if node is None:
            return
        self.inorder(node.lchild)
        print(node.elem)
        self.inorder(node.rchild)
        
    # 后序遍历
    def postorder(self, node):
        if node is None:
            return
        self.postorder(node.lchild)
        self.postorder(node.rchild)
        print(self.elem)

根据 先序遍历+中序遍历 或 后序+中序 推导出一颗树

  1. 先从先序/后序中找出root节点

  2. 在中序中找到root节点 分成两半

  3. 先序中 安装中序中的两半 分开

  4. 左右子树分别重复前三步操作

标签:node,None,06,cur,self,二叉树,rchild,树及
From: https://www.cnblogs.com/superhin/p/17464295.html

相关文章

  • 【20230607】【用Python让Excel飞起来】 第一章 python 快速上手 I
    001安装Anacondaanaconda.com直接下载,然后安装记得安装的时候将path和link.py点上,不然回头去配置环境变量有一些麻烦如何判断成功安装在CMD中输入conda-V即可查看002安装配置pycharm直接安装即可,官网下载,然后安装注意pycharm的pro版本是收费的,edu邮箱可以免费1年......
  • 欧奈儿行业 RPS 排名,一图览全貌 2023-06-07
    自动复盘2023-06-07k线图是最好的老师,点击详情图可以看到行业20日RPS的排名,最底下子图是行业rps走势线跟踪板块总结:成交额超过100亿排名靠前,macd柱由绿转红公众hao:醉卧梦星河欧奈尔行业RPS排名天天更新追踪主力行业趋势更容......
  • 【2023-06-05】三胎前提
    20:00那曾柔软细腻的心,被这世界狠狠嘲笑过,但我的本质不可摧毁,我心安,释然,从容生出新叶。                                                 ——黑塞何太问我还敢不敢要......
  • 【2023-06-06】难得平淡
    20:00窗间梅熟落蒂,墙下笋成出林。连雨不知春去,一晴方觉夏深。                                                 ——范成大·《喜晴》昨晚下班回到家里时,已经10点半了......
  • 【锐格】数据结构-实验-二叉树
    7075#include<iostream>#include<cstdio>usingnamespacestd;typedefstructTNode{chardata;structTNode*lchild,*rchild;}BiNode,*BiTree;BiTreeT;voidcreateTree(BiTree&T){charch;cin>>ch;if(ch==&#......
  • 30. 平衡二叉树
    一、什么是平衡二叉树  平衡二叉树(BalanceFactorTree,简称AVL树)是一个特殊的二叉树,它可以是空树。如果不为空,它任一节点左、右子树高度差的绝对值不超过1,即|BF(T)|≤1。其中,BF是指平衡因子(BalanceFactory):\(BF(T)=h_{L}-h_{R}\),其中\(h_{L}\)和\(h_{R}\)分别为......
  • 2023-06-07 搭建后端开发环境(新手篇)
    本文主要使用wampserver来搭建后端windows开发环境。wamp下载地址:https://sourceforge.net/projects/wampserver/files/WampServer%203/WampServer%203.0.0/注意:该wamp版本需要使用win7以上机器开发。我现在下载的是3.3.0版本的wamp,下载完后无脑next就行了,他会直接帮你装好一下......
  • 006 数据库学习笔记--字符串操作函数 + 索引
    常用字符串操作函数:--返回字符串中指定的子串出现的开始位置(索引从1开始)selectCHARINDEX('34','1234567890123')asstartIndex--返回字符串中指定的子串出现的开始位置(索引从1开始,字串前必须加%)selectPATINDEX('%34%','1234567890123')asstartIndex--大小写转化s......
  • SSO2.0 14-20230607
                  ......
  • 2352. 相等行列对_2023_06_06
    title:2352.相等行列对-力扣(LeetCode)tags:-LeetCode-Go-C/C++目录2352.相等行列对-力扣(LeetCode)SolutioncppGo2352.相等行列对-力扣(LeetCode)给你一个下标从0开始、大小为nxn的整数矩阵grid,返回满足Ri行和Cj列相等的行列对(Ri,Cj)的数目。......