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  按层遍历二叉树

  1. 针对二叉树的宽度优先遍历;
  2. 宽度优先遍历常使用队列结构;
  3. (往往要求连同行号一起打印出来!!)

3.  平衡二叉树(AVL树)

  概念:

  1. 空树是平衡二叉树;
  2. 如果一棵树不为空,并且其中所有的子树都满足各自的左子树与右子树的高度差都不超过1,是平衡二叉树;
    • 例如:
        •  (平衡二叉树)
        • (非平衡二叉树)
        • 因为,对于上图中,以2为节点的子树,其左子树为2,右子树为0,高度差大于1,我所以不是平衡二叉树;

4.  搜索二叉树

  搜索二叉树的特征:

  每棵子树的头节点的值都比各自左子树上的所有节点值要大,也要比各自右子树上的所有节点值要小.

  1. 搜索二叉树按照中序遍历得到的序列,一定是从小到大排列的.
  2. 其中,红黑树/平衡二叉树(AVL树)等,都是搜索二叉树的不同实现.

5.  满二叉树

  概念:满二叉树是除了最后一层节点无任何子节点外,剩下每一层上的节点都有两个子节点.

  满二叉树的层数即为L,节点数即为N,则N=2L-1;L=log2(N+1).

5.  完全二叉树

   概念:除了最后一层之外,其他每一层的节点数都是满的,最后一层如果也满了,是一颗满二叉树,也是完全二叉树.最后一层如果不满,缺少的节点也全部的集中右边,那也是一颗满二叉树.

  如下,都是完全二叉树!!!

   

数据结构与算法(5)----->二叉树的更多相关文章

  1. 【数据结构与算法】二叉树的 Morris 遍历(前序、中序、后序)

    前置说明 不了解二叉树非递归遍历的可以看我之前的文章[数据结构与算法]二叉树模板及例题 Morris 遍历 概述 Morris 遍历是一种遍历二叉树的方式,并且时间复杂度O(N),额外空间复杂度O(1 ...

  2. Java数据结构和算法(六)--二叉树

    什么是树? 上面图例就是一个树,用圆代表节点,连接圆的直线代表边.树的顶端总有一个节点,通过它连接第二层的节点,然后第二层连向更下一层的节点,以此递推 ,所以树的顶端小,底部大.和现实中的树是相反的, ...

  3. 数据结构和算法 – 9.二叉树和二叉查找树

      9.1.树的定义   9.2.二叉树 人们把每个节点最多拥有不超过两个子节点的树定义为二叉树.由于限制子节点的数量为 2,人们可以为插入数据.删除数据.以及在二叉树中查找数据编写有效的程序了. 在 ...

  4. 数据结构与算法之二叉树 ——in dart

    用dart语言实现的二叉树,实现了插入.查找.删除,中序遍历.前序.后序遍历等功能. class BinaryTree<E extends Comparable> { Node<E& ...

  5. Java数据结构和算法(七)--AVL树

    在上篇博客中,学习了二分搜索树:Java数据结构和算法(六)--二叉树,但是二分搜索树本身存在一个问题: 如果现在插入的数据为1,2,3,4,5,6,这样有序的数据,或者是逆序 这种情况下的二分搜索树 ...

  6. javascript数据结构与算法-- 二叉树

    javascript数据结构与算法-- 二叉树 树是计算机科学中经常用到的一种数据结构.树是一种非线性的数据结构,以分成的方式存储数据,树被用来存储具有层级关系的数据,比如文件系统的文件,树还被用来存 ...

  7. 数据结构与算法系列研究五——树、二叉树、三叉树、平衡排序二叉树AVL

    树.二叉树.三叉树.平衡排序二叉树AVL 一.树的定义 树是计算机算法最重要的非线性结构.树中每个数据元素至多有一个直接前驱,但可以有多个直接后继.树是一种以分支关系定义的层次结构.    a.树是n ...

  8. Java数据结构和算法 - 二叉树

    前言 数据结构可划分为线性结构.树型结构和图型结构三大类.前面几篇讨论了数组.栈和队列.链表都是线性结构.树型结构中每个结点只允许有一个直接前驱结点,但允许有一个以上直接后驱结点.树型结构有树和二叉树 ...

  9. javascript数据结构与算法---二叉树(删除节点)

    javascript数据结构与算法---二叉树(删除节点) function Node(data,left,right) { this.data = data; this.left = left; t ...

  10. javascript数据结构与算法---二叉树(查找最小值、最大值、给定值)

    javascript数据结构与算法---二叉树(查找最小值.最大值.给定值) function Node(data,left,right) { this.data = data; this.left ...

随机推荐

  1. 添加w3c验证图片到网站

    1.在http://validator.w3.org/网站验证 2.添加验证通过后的代码至自己的网站 类似<p>    <a href="http://validator. ...

  2. iOS自己定义对象保存到本地文件

    我是将聊天记录存到本地,里边用到了自己定义的对象.把数据转成Data格式存到本地.在转Data格式的时候报错了.这时候须要先将自己定义对象进行归档才干够转Data格式. 方法例如以下: 一.在.h文件 ...

  3. go with go

    1, vim 安装vim-go 打造GOLANG 专用IDE golang和vim-go安装配置 2, 阅读图书 <Go语言实战> William Kennedy等, 李兆海 译 3,在线 ...

  4. 用HttpClient模拟HTTP的GET和POST请求(转)

    本文转自:http://blog.csdn.net/xiazdong/article/details/7724349 一.HttpClient介绍   HttpClient是用来模拟HTTP请求的,其 ...

  5. mapreduce代码实现入门

    mapreduce代码主要包括三个类,map类.reduce类以及测试类! 以wordcount为例, map类为: static class WordMapper extends Mapper< ...

  6. 解决UICollectionView的Cell复用引起的布局混乱问题

    解决UICollectionView的Cell复用引起的布局混乱问题   问题复现.gif 查了一下度娘发现没有好的解决办法,于是发动自己的聪明才智,终于找到如下解决办法(充分证明了自己动手丰衣足食啊

  7. OIer同样是音乐家

    烦闷的时候,shenben为大家准备了2首歌(不用耳机也能听哦) 只需把代码复制到dev-c++的编辑器上,轻按F11,然后聆听OIer的音乐…… 千本樱 曲谱 #include <cstdio ...

  8. 【BZOJ4999】This Problem Is Too Simple! 离线+树状数组+LCA

    [BZOJ4999]This Problem Is Too Simple! Description 给您一颗树,每个节点有个初始值. 现在支持以下两种操作: 1. C i x(0<=x<2 ...

  9. EasyRTMP+EasyDSS实现一套完整的紧急视频回传直播与存储回放方案

    需求来源 紧急视频回传云端:即拍即传.云端存储.紧急录像.云拍云录!这些需求现在可能对于我们来说比较远,大部分也是在行业中才会用到,但相信在不就的将来肯定会落地到每个人的手中,因为这是一个自我保护.自 ...

  10. 更新pip10后 ImportError: cannot import name ‘main'(转)

    解决:找到报错文件,也就是那个pip,然后cd进目录 vi 编辑pip,将里面的内容改为如下所示: # -*- coding: utf-8 -*- import re import sys from ...