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

一、以序列 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. Java进阶专题(二十一) 消息中间件架构体系(3)-- Kafka研究

    前言 Kafka 是一款分布式消息发布和订阅系统,具有高性能.高吞吐量的特点而被广泛应用与大数据传输场景.它是由 LinkedIn 公司开发,使用 Scala 语言编写,之后成为 Apache 基金会 ...

  2. 【Java】Java注释 - 单行、块、文档注释

    简单记录,Java 核心技术卷I 基础知识(原书第10 版) 注释 我们在编写程序时,经常需要添加一些注释,用来描述某段代码的作用,提高Java源程序代码的可读性,使得Java程序条理清晰. 写代码的 ...

  3. 【MySQL】CentOS7中使用systemctl工具管理启动和停止MySQL

    centos7以前版本,可以使用这个/etc/init.d/mysqld start 来启动mysql 但是centos7之后,通过systemctl start mysqld.service 这个要 ...

  4. [APUE] 文件 I/O

    文件操作相关 API:open, read, write, lseek, close. 多进程共享文件的相关 API:dup, dup2, fcntl, sync, fsync, ioctl. 文件操 ...

  5. springAOP的概述及使用

    Spring AOP SpringAOP是Spring中非常重要的功能模块之一,该模块提供了面向切面编程,在事务处理,日志记录,安全控制等操作中广泛使用. SpringAOP的基本概念 AOP的概念 ...

  6. 盼望着,盼望着。它终于来了!!!剪辑Windows PC测试版!

    盼望着,盼望着.它终于来了!!!剪辑Windows PC测试版! 喜欢短视频抖音的小伙伴们,是不是都对手机抖音剪映操作不是很满意.期待WINDOWS电脑版剪映的来临.在此之前只有MAC版本,不能满足广 ...

  7. Manachar’s Algorithm

    Manachar's Algorithm Longest palindromic substring - Wikipedia  https://en.wikipedia.org/wiki/Longes ...

  8. Fixing SQL Injection: ORM is not enough

    Fixing SQL Injection: ORM is not enough | Snyk https://snyk.io/blog/sql-injection-orm-vulnerabilitie ...

  9. XA Transactions

    XA Transactions XA is a two-phase commit protocol that is natively supported by many databases and t ...

  10. etcd 性能优化实践

    https://mp.weixin.qq.com/s/lD2b-DZyvRJ3qWqmlvHpxg 从零开始入门 K8s | etcd 性能优化实践 原创 陈星宇 阿里巴巴云原生 2019-12-16 ...