数据结构与算法(5)----->二叉树
1. 概念
二叉树节点的结构:
class Node{
int value; // value表示二叉树的节点值
Node left;
Node right; // left和right表示二叉树的两个孩子
Node(int data){
this.value = data;
}
}
如图:

2. 二叉数的遍历
2.1 按顺序遍历二叉树
- 先序遍历:中、左、右
- 中序遍历:左、中、右
- 后序遍历:左、右、中
- 以下图二叉树为例:

- 先序遍历结果为: 1 ,2,4,5,3,6,7
- 中序遍历结果为: 4,2,5,1,6,3,7
- 后序遍历结果为: 4,5,2,6,7,3,1
2.2 按层遍历二叉树
- 针对二叉树的宽度优先遍历;
- 宽度优先遍历常使用队列结构;
- (往往要求连同行号一起打印出来!!)
3. 平衡二叉树(AVL树)
概念:
- 空树是平衡二叉树;
- 如果一棵树不为空,并且其中所有的子树都满足各自的左子树与右子树的高度差都不超过1,是平衡二叉树;
- 例如:
(平衡二叉树)
(非平衡二叉树)- 因为,对于上图中,以2为节点的子树,其左子树为2,右子树为0,高度差大于1,我所以不是平衡二叉树;
4. 搜索二叉树
搜索二叉树的特征:
每棵子树的头节点的值都比各自左子树上的所有节点值要大,也要比各自右子树上的所有节点值要小.

- 搜索二叉树按照中序遍历得到的序列,一定是从小到大排列的.
- 其中,红黑树/平衡二叉树(AVL树)等,都是搜索二叉树的不同实现.
5. 满二叉树
概念:满二叉树是除了最后一层节点无任何子节点外,剩下每一层上的节点都有两个子节点.

满二叉树的层数即为L,节点数即为N,则N=2L-1;L=log2(N+1).
5. 完全二叉树
概念:除了最后一层之外,其他每一层的节点数都是满的,最后一层如果也满了,是一颗满二叉树,也是完全二叉树.最后一层如果不满,缺少的节点也全部的集中右边,那也是一颗满二叉树.
如下,都是完全二叉树!!!

数据结构与算法(5)----->二叉树的更多相关文章
- 【数据结构与算法】二叉树的 Morris 遍历(前序、中序、后序)
前置说明 不了解二叉树非递归遍历的可以看我之前的文章[数据结构与算法]二叉树模板及例题 Morris 遍历 概述 Morris 遍历是一种遍历二叉树的方式,并且时间复杂度O(N),额外空间复杂度O(1 ...
- Java数据结构和算法(六)--二叉树
什么是树? 上面图例就是一个树,用圆代表节点,连接圆的直线代表边.树的顶端总有一个节点,通过它连接第二层的节点,然后第二层连向更下一层的节点,以此递推 ,所以树的顶端小,底部大.和现实中的树是相反的, ...
- 数据结构和算法 – 9.二叉树和二叉查找树
9.1.树的定义 9.2.二叉树 人们把每个节点最多拥有不超过两个子节点的树定义为二叉树.由于限制子节点的数量为 2,人们可以为插入数据.删除数据.以及在二叉树中查找数据编写有效的程序了. 在 ...
- 数据结构与算法之二叉树 ——in dart
用dart语言实现的二叉树,实现了插入.查找.删除,中序遍历.前序.后序遍历等功能. class BinaryTree<E extends Comparable> { Node<E& ...
- Java数据结构和算法(七)--AVL树
在上篇博客中,学习了二分搜索树:Java数据结构和算法(六)--二叉树,但是二分搜索树本身存在一个问题: 如果现在插入的数据为1,2,3,4,5,6,这样有序的数据,或者是逆序 这种情况下的二分搜索树 ...
- javascript数据结构与算法-- 二叉树
javascript数据结构与算法-- 二叉树 树是计算机科学中经常用到的一种数据结构.树是一种非线性的数据结构,以分成的方式存储数据,树被用来存储具有层级关系的数据,比如文件系统的文件,树还被用来存 ...
- 数据结构与算法系列研究五——树、二叉树、三叉树、平衡排序二叉树AVL
树.二叉树.三叉树.平衡排序二叉树AVL 一.树的定义 树是计算机算法最重要的非线性结构.树中每个数据元素至多有一个直接前驱,但可以有多个直接后继.树是一种以分支关系定义的层次结构. a.树是n ...
- Java数据结构和算法 - 二叉树
前言 数据结构可划分为线性结构.树型结构和图型结构三大类.前面几篇讨论了数组.栈和队列.链表都是线性结构.树型结构中每个结点只允许有一个直接前驱结点,但允许有一个以上直接后驱结点.树型结构有树和二叉树 ...
- javascript数据结构与算法---二叉树(删除节点)
javascript数据结构与算法---二叉树(删除节点) function Node(data,left,right) { this.data = data; this.left = left; t ...
- javascript数据结构与算法---二叉树(查找最小值、最大值、给定值)
javascript数据结构与算法---二叉树(查找最小值.最大值.给定值) function Node(data,left,right) { this.data = data; this.left ...
随机推荐
- xml.etree.ElementTree模块的封装
转载:https://www.cnblogs.com/hongten/p/hongten_python_xml_etree_elementtree.html 1 # -*- coding: utf-8 ...
- PHP和mysql的长连接
关于 PHP MySQL 长连接.连接池的一些探索 PHP连接MySQL的方式,用的多的是mysql扩展.mysqli扩展.pdo_mysql扩展,是官方提供的.php的运行机制是页面执行完会释放所有 ...
- linux下修改tomcat80端口
在这里利用iptables防火墙,将80端口的请求转发到8080端口 在root用户下执行iptales -t nat -A PREROUTING -p tcp --dport 80 -j REDIR ...
- java 发展简史
[0]README 0.1) 本文转自 core java volume 1,仅供了解Java 的发展历史,它的前世今生,所谓知己知彼,百战不殆(just a joke) : [1]java 发展简史 ...
- liunx 安装工具总结
1 下载相关文件,比如hadoop 2 解压文件 tar -zxcf xxx.tar.gz 3 mv xxx 到指定目录:通常安装到/usr/local 或者自己建个目录 /usr/develo ...
- struts2_6_多个struts配置文件的应用
在大部分应用里,随着应用规模的添加,系统中Action的数量也会大量添加.导致struts.xml配置文件变的很臃肿,为了避免struts.xml文件过于庞大.臃肿,提高struts.xml文件的可读 ...
- Android发送验证码的倒计时button
1 直接上图 2 原理 原理非常easy,就是把对应的倒计时逻辑等封装到一个控件中,并向外部提供接口. 3 代码 import java.util.Timer; import java.util.Ti ...
- c# combobox 绑定枚举方式
建立一个类 : using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...
- css jquery 实现轮播效果
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- getStorageSync const UID = this.$parent.UID wx.getStorageSync('UID')
getStorageSync 在程序运行中是在内存 还是去文件系统读取? const UID = this.$parent.UID wx.getStorageSync('UID') ...