二叉排序树的中序遍历就是按照关键字的从小到大顺序输出(先序和后序可没有这个顺序)

一、以序列 6 8 5 7 9 3构建二叉排序树:

二叉排序树就是中序遍历之后是有序的;

构造二叉排序树步骤如下;

插入法构造:

2、

以此类推 将要插入的结点先跟根结点比较, 比根结点大进入右子树 反之进入 左子树;

在跟进入的 左子树(右子树)的结点比较 方法同上;

直到没有结点了  在插入;  你给的排序最后的二叉排序树如下;

中序遍历结果是  :  3 4 5 6 7 8 9 ;

先序遍历结果是 : 6 4 3 5 8 7 9 ;

建立二叉排序树后进行查找,则等概率情况下查找成功的平均查找长度为(1+2*2+4*3)/7=17/7

例题:

已知长度为9的表16、3、7、11、9、26、18、14、15,建立二叉排序树后进行查找,则等概率情况下查找成功的平均查找长度为(31/9)

本题考查二叉排序树的查找。
二叉排序树又称为二叉查找树,其定义为:二叉排序树或者是一棵空树,或者是具有如下性质(BST性质)的二叉树:
(1)若它的左子树非空,则左子树上所有结点的值均小于根结点;
(2)若它的右子树非空,则右子树上所有结点的值均大于根结点;
(3)左、右子树本身又各是一棵二叉排序树。
在做该题时,首先将表中的9个元素放进二叉树中构成二叉排序树,在构造二叉排序树时,我们将表中的元素依次按照构造二叉排序树的规则往树中添加元素,在获得二叉排序树后,计算平均长度就变得简单了,为(1+2+2+3+3+4+5+5+6)/9=31/9。

二、二叉树的先序、中序、后序遍历

前序遍历:根节点->左子树->右子树(根->左->右)

中序遍历:左子树->根节点->右子树(左->根->右)

后序遍历:左子树->右子树->根节点(左->右->根)

举个例子

前序遍历:根结点 —> 左子树 —> 右子树(先遍历根节点,然后左右)

这棵树的前序遍历为:ABDEGHCF

中序遍历:左子树—> 根结点 —> 右子树(在中间遍历根节点)

这棵树的中序遍历为:DBGEHACF

后序遍历:左子树 —> 右子树 —> 根结点(最后遍历根节点)

这棵树的后序遍历为:DGHEBFCA
 
 
三、树的括号表示规则

(1)若树T为空树,则其括号表示为空

(2)若树T只包含一个结点,则其括号表示即为该结点本身

(3)若树T由根结点A和它的m棵子树T1,T2,...,Tm构成,则其括号表示为:A(T1的括号表示,T2的括号表示,... ,Tm的括号表示)

其中,子树的括号表示同样应该遵循以上规则

实例:

 
四、知道先序中序求后序
 

二叉排序树的构造 && 二叉树的先序、中序、后序遍历 && 树的括号表示规则的更多相关文章

  1. LeetCode:二叉树的前、中、后序遍历

    描述: ------------------------------------------------------- 前序遍历: Given a binary tree, return the pr ...

  2. DS Tree 已知先序、中序 => 建树 => 求后序

    参考:二叉树--前序和中序得到后序 思路历程: 在最初敲的时候,经常会弄混preorder和midorder的元素位置.大体的思路就是在preorder中找到根节点(根节点在序列的左边),然后在mid ...

  3. TZOJ 3209 后序遍历(已知中序前序求后序)

    描述 在数据结构中,遍历是二叉树最重要的操作之一.所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问. 这里给出三种遍历算法. 1.中序遍历的递归算法定义:  ...

  4. [Java]算术表达式求值之二(中序表达式转后序表达式方案,支持小数)

    Inlet类,入口类,这个类的主要用途是验证用户输入的算术表达式: package com.hy; import java.io.BufferedReader; import java.io.IOEx ...

  5. [Java]算术表达式求值之一(中序表达式转后序表达式方案)

    第二版请见:https://www.cnblogs.com/xiandedanteng/p/11451359.html 入口类,这个类的主要用途是粗筛用户输入的算术表达式: package com.h ...

  6. 五二不休息,今天也学习,从JS执行栈角度图解递归以及二叉树的前、中、后遍历的底层差异

    壹 ❀ 引 想必凡是接触过二叉树算法的同学,在刚上手那会,一定都经历过题目无从下手,甚至连题解都看不懂的痛苦.由于leetcode不方便调试,题目做错了也不知道错在哪里,最后无奈的cv答案后心里还不断 ...

  7. 已知树的前序、中序,求后序的java实现&已知树的后序、中序,求前序的java实现

    public class Order { int findPosInInOrder(String str,String in,int position){ char c = str.charAt(po ...

  8. HDU 1710 (二叉树的前序和中序,求后序)

    题目链接 题目大意: 输入二叉树的前序.中序遍历,请输出它的后序遍历 #include <stdio.h> #include <string.h> ; // 长度为n s1 前 ...

  9. 分别求二叉树前、中、后序的第k个节点

    一.求二叉树的前序遍历中的第k个节点 //求先序遍历中的第k个节点的值 ; elemType preNode(BTNode *root,int k){ if(root==NULL) return ' ...

随机推荐

  1. 【RAC】运行root.sh的时候报错root.sh Oracle CRS stack is already configured and will be running under init(1M)

    环境:oracle10g 系统:CentOS6.4 开始的时候,在节点1上运行root.sh发现出现90s 的时候hang住了,结束掉,结局完事后,再次运行root.sh报错 WARNING: dir ...

  2. Apache目录详解

    Apache的主要目录和配置文件理解 参考链接:http://httpd.apache.org/docs/2.4/misc/security_tips.html 一.Apache主要配置文件注释(演示 ...

  3. markdown编写文件目录结构

    1.先全局安装tree cnpm i tree-node-cli -g 然后输入: tree --help -L 是确定要几级目录,-I是排除哪个文件夹下的,然后我是要在README里面生成项目结构树 ...

  4. MYSQL基础知识的复习1

    数据库(是存放数据的仓库) 1.根据存储量以及安全性上来划分: 大型数据库:DB2 Oracle(毕业) Hbase 银行 公安局(不加班 没网) 移动 中型数据库:mysql sqlserver(. ...

  5. SUGA

    愿试炼的终点是花开万里 愿以渺小启程伟大结束 ----闵玧其

  6. etcd 与 Zookeeper、Consul 等其它 kv 组件的对比

    基于etcd的分布式配置中心 etcd docs | etcd versus other key-value stores https://etcd.io/docs/v3.4.0/learning/w ...

  7. SparkMLlib—协同过滤之交替最小二乘法ALS原理与实践

    SparkMLlib-协同过滤之交替最小二乘法ALS原理与实践 一.Spark MLlib算法实现 1.1 显示反馈 1.1.1 基于RDD 1.1.2 基于DataFrame 1.2 隐式反馈 二. ...

  8. SparkStreaming直连方式读取kafka数据,使用MySQL保存偏移量

    SparkStreaming直连方式读取kafka数据,使用MySQL保存偏移量 1. ScalikeJDBC 2.配置文件 3.导入依赖的jar包 4.源码测试 通过MySQL保存kafka的偏移量 ...

  9. kafka auto.offset.reset参数解析

    kafka auto.offset.reset参数解析 1.latest和earliest区别 2.创建topic 3.生产数据和接收生产数据 4.测试代码 auto.offset.reset关乎ka ...

  10. DEDECMS:解决BMP、jpeg图片或MP4视频无法上传和在后台无法显示

    一.BMP图片无法上传解决方法: 1.修改配置文件: 在include-->dialog的文件夹下, select_images_post.php--> 把 $sparr = Array( ...