二叉树的特点:

①、每个节点最多有两个子树,所以二叉树中不存在度大于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. input框触发回车事件

    window.event只能在IE下运行,不能在firefox下运行,这是因为firefox的event只能在事件发生的现场使用.   在firefox里直接调用event对象会报undefined. ...

  2. 基于Openresty+的WEB安全防护系统架构--转

    随着时间的推移,我们在实践中也不断的演进我们的服务部署方案,希望WEB防护,不只是单独的云WAF来保护服务,而有其它的相关服务,对WAF进行增强加固的合理配合.我们使用Openresty+系统构建了W ...

  3. 物联网架构成长之路(4)-EMQ插件创建

    1. 说明 以下用到的知识,是建立在我目前所知道的知识领域,以后如果随着知识的拓展,不一定会更新内容.由于不是EMQ公司的人,EMQ的文档又很少,很多知识点都是靠猜的.2. 一些资料 架构设计 htt ...

  4. python 函数的参数的几种类型

    定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解 ...

  5. 【系统移植】uboot详细分析

    uboot使用 uboot控制台,倒计时    命令: 调试,操作一些硬件 setenv printenv saveenv  nand erase  nand write  tftp zImage h ...

  6. graph radar 界面开发笔记

    首先需要了解odoo图表视图的实现是采用了前端nvd3框架,nvd3是一个以复用为目的,基于d3框架的前端框架,官方地址:nvd3.org.从官网可见,目前nvd3可以用来画的图表并不包含雷达图. 第 ...

  7. Android——RecycleView

    RecycleView设置点击事件 http://blog.csdn.net/guxiao1201/article/details/40423361

  8. hdoj:2023

    #include <iostream> #include <string> #include <vector> ][],b[],c[]; using namespa ...

  9. Java知多少(33)多态对象的类型转换

    这里所说的对象类型转换,是指存在继承关系的对象,不是任意类型的对象.当对不存在继承关系的对象进行强制类型转换时,java 运行时将抛出 java.lang.ClassCastException 异常. ...

  10. Why you should use async tasks in .NET 4.5 and Entity Framework 6

    Improve response times and handle more users with parallel processing Building a web application usi ...