二叉树的特点:

①、每个节点最多有两个子树,所以二叉树中不存在度大于2的节点。注意不是只有两个子树,最多有两个子树,没有子树或者只有一颗子树都是可以的。

②左子树和右子树是有顺序的。

③即使树中只有一颗子树,也要区分它是左子树还是右子树。

二叉树具有五种基本形态。

①、空二叉树。

②、只有一个根节点。

③根节点只有左子树。

④根节点只有右子树。

⑤根节点既有左子树又有右子树。

特殊的二叉树

①斜树

所有的节点都只有左子树的二叉树称为左斜树。

所有的节点都只有右子树的二叉树称为右斜树。

②满二叉树

在一颗二叉树中,如果所有的分支节点都存在左子树和右子树,并且所有的叶子结点都在同一层上,这样的二叉树称为满二叉树。

满二叉树的特点:

1、叶子只能出现在最下面一层。

2、非叶子结点的度一定是2.

3、同样结点的二叉树中,满二叉树中结点个数最多,叶子结点最多

③完全二叉树

完全二叉树的特点:

1、叶子结点只能出现在最下面的两层。

2、最下层的叶子一定集中在左侧连续位置。

3、倒数第二层有叶子结点,一定集中在右侧连续位置。

4、如果某个结点的度是1,则该结点一定只有左孩子。

5、同样结点的二叉树,完全二叉树的深度是最小的。

二叉树的性质

①在二叉树中的第n层,最多2的n-1次方个结点(n>1)。

②在一颗深度为n的二叉树中,最多有2的n次方-1个结点。(n>1)

对于任意一颗二叉树,n0代表叶子结点的个数,n1代表度数为1的节点的个数,n2代表度度数为2的节点的个数。

则由于节点的总个数

n = n0 + n1 + n2

然后根据连接线,计算一颗二叉树的进入线的条数

由于根节点没有分支进入,则总的进入线条数等于n-1,然后根据节点的度计算总的进入线条数为n1+2n2

即n-1 = n1 + n2

根据①式和②式可得n0 = 2n2+1.

③一颗完全二叉树的深度,假设二叉树的深度为h,节点个数为n,

则由于一颗二叉树的节点总个数为2的h次方-1,

最大极端情况是这课完全二叉树是满二叉树,则n小于等于2的h次方-1

最小极端的情况是把这颗完全二叉树的最下层去掉,则n > 2的h-1次方-1

结合这两个式子可得h小于等于log2 n

php之二叉树的更多相关文章

  1. [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法

    二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...

  2. 二叉树的递归实现(java)

    这里演示的二叉树为3层. 递归实现,先构造出一个root节点,先判断左子节点是否为空,为空则构造左子节点,否则进入下一步判断右子节点是否为空,为空则构造右子节点. 利用层数控制迭代次数. 依次递归第二 ...

  3. c 二叉树的使用

    简单的通过一个寻找嫌疑人的小程序 来演示二叉树的使用 #include <stdio.h> #include <stdlib.h> #include <string.h& ...

  4. Java 二叉树遍历右视图-LeetCode199

    题目如下: 题目给出的例子不太好,容易让人误解成不断顺着右节点访问就好了,但是题目意思并不是这样. 换成通俗的意思:按层遍历二叉树,输出每层的最右端结点. 这就明白时一道二叉树层序遍历的问题,用一个队 ...

  5. 数据结构:二叉树 基于list实现(python版)

    基于python的list实现二叉树 #!/usr/bin/env python # -*- coding:utf-8 -*- class BinTreeValueError(ValueError): ...

  6. [LeetCode] Path Sum III 二叉树的路径和之三

    You are given a binary tree in which each node contains an integer value. Find the number of paths t ...

  7. [LeetCode] Find Leaves of Binary Tree 找二叉树的叶节点

    Given a binary tree, find all leaves and then remove those leaves. Then repeat the previous steps un ...

  8. [LeetCode] Verify Preorder Serialization of a Binary Tree 验证二叉树的先序序列化

    One way to serialize a binary tree is to use pre-oder traversal. When we encounter a non-null node, ...

  9. [LeetCode] Binary Tree Vertical Order Traversal 二叉树的竖直遍历

    Given a binary tree, return the vertical order traversal of its nodes' values. (ie, from top to bott ...

  10. [LeetCode] Binary Tree Longest Consecutive Sequence 二叉树最长连续序列

    Given a binary tree, find the length of the longest consecutive sequence path. The path refers to an ...

随机推荐

  1. Linux好用的工具命令 - nl/du

    nl 添加行号后打印输出文本内容,以下例子演示了cat 和nl 输出nlDemo文档的区别. [root@ptarmiganantelope:~]# cat nlDemo root:x:0:0:roo ...

  2. 【XMPP】XMPP类型

    1.ConnectionConfiguration 作为用于与XMPP服务建立连接的配置.它能配置:连接是否使用TLS,SASL加密. 包含内嵌类:ConnectionConfiguration.Se ...

  3. 【30集iCore3_ADP出厂源代码(ARM部分)讲解视频】30-8底层驱动之RTC

    视频简介:该视频介绍iCore3应用开发平台中RTC的基本配置方法以及在应用开发平台中的实时显示. 源视频包下载地址:链接:http://pan.baidu.com/s/1o80jHvc 密码:f8r ...

  4. Cordova开发App入门之创建android项目

    Apache Cordova是一个开源的移动开发框架.允许使用标准的web技术-HTML5,CSS3和JavaScript做跨平台开发. 应用在每个平台的具体执行被封装了起来,并依靠符合标准的API绑 ...

  5. JVM 内部原理(三)— 基本概念之类文件格式

    JVM 内部原理(三)- 基本概念之类文件格式 介绍 版本:Java SE 7 每位使用 Java 的程序员都知道 Java 字节码在 Java 运行时(JRE - Java Runtime Envi ...

  6. Java知多少(90)菜单

    有两种类型的菜单:下拉式菜单和弹出式菜单.本章只讨论下拉式菜单编程方法.菜单与JComboBox和JCheckBox不同,它们在界面中是一直可见的.菜单与JComboBox的相同之处是每次只可选择一个 ...

  7. python+selenium+unnittest框架

    python+selenium+unnittest框架,以百度搜索为例,做了一个简单的框架,先看一下整个项目目录结构 我用的是pycharm工具,我觉得这个工具是天使,超好用也超好看! 这些要感谢原作 ...

  8. Mysql系列七:分库分表技术难题之分布式全局唯一id解决方案

    一.前言 在前面的文章Mysql系列四:数据库分库分表基础理论中,已经说过分库分表需要应对的技术难题有如下几个: 1. 分布式全局唯一id 2. 分片规则和策略 3. 跨分片技术问题 4. 跨分片事物 ...

  9. hello alibaba

    http://ifeve.com/dubbo-learn-book/ http://ifeve.com/leader-follower-thread-model/ http://ifeve.com/a ...

  10. RDP 数据库简介

    在扩增子数据分析中,有时会发现多个OTU 注释到了同一个species ,  为什么会出现这种情况呢? 首先既然在OTU水平能分开,说明序列的相似度小于97%,  同一个物种的同一个基因的片段相似度会 ...