结构(二叉树)

  

 二叉树的三种遍历

 

二叉树的有关计算

1.二叉树的深度和层数其实是一样的。
2.任意一棵树的总结点数等于总分支数+1
3.叶子结点也称叶子,度为0的结点。
4.一个深度为n的满二叉树的总结点数为 (2^(n-1))-1(其实得出这个结论画个图就知道了,不难)
5.深度为h的完全二叉树至少有2^(h-1)个结点,最多有(2^h)-1个结点。

相关题目:
1.一棵二叉树第六层(根结点为第一层)的结点数最多为?
其实这道题很简单,就是2^5=32

2.某二叉树中度为2的结点有18个,则该二叉树中有多少个叶子结点?
根据总结点数=总分支数+1,设叶子有n个,则有
18 + n = 18*2 + 1
n = 19

3.设一棵完全二叉树共有199个结点,那么该二叉树共有个分支结点?
思路就是先求出这个完全二叉树的叶子数,然后用总结点数减去叶子数就是分支结点的数目了。
因为有 (2^7) - 1<199<=(2^8)-1 
所以得深度为8,前7层为满二叉树,所以前7层的总结点数为(2^7) - 1 = 127 ,第7层的结点数为 2^6 = 64
则最后一层的叶子为 199 - 127 = 72 ,所以第7层的叶子数为 64 - 72/2 = 28
所以总叶子数为 72+28 = 100
分支数为 199 -100 = 99

4.在深度为7的二叉树中,最多有多少个叶结点?(注意这里问的是叶结点,而不是结点数,如果是结点数的话答案是(2^6)-1 )
这种题目和例子1差不多,为 2^6

5.设一棵完全二叉树共有127个结点,那么该二叉树是满二叉树吗?
因为 一个深度为n的满二叉树的总结点数为 2^(n-1)-1
则设 2^(n-1)-1 = 127 
n = 8 ,所以这也是满二叉树。

6.具有53个结点的完全二叉树的深度为?
因为一个二叉树的结点数必然不会超过深度一样的满二叉树的结点数,所以有
(2^5)-1<53<=(2^6)-1 
所以答案为6

7.设一棵完全二叉树共有700个结点,则在该二叉树中有多少个叶子结点?
从第五题延伸出来的题目,由例6的思路得, (2^9)-1<700<=(2^10) - 1
所以得这棵二叉树前面9层是满二叉树,则得前9层的总结点数为 (2^9)-1 = 512 -1 =511
则剩下来的结点数就是最后一层的结点数,为 700 - 511 = 189 ,把他凑成偶数为190,则也就是说,
最后一层是从第九层中 190/2= 95个结点延伸出来的,所以第九层失去了95个叶子,又因为第九层的
结点数为 2^8 = 256,则第九层的叶子数为 256 - 95,则所有的结点数为256-95 +189 =350

时间: 2024-11-01 23:02:59

结构(二叉树)的相关文章

存储结构二叉树

二叉树的存储结构有两种:顺序存储结构和链式存储结构. 顺序存储结构 对于满二叉树和全然二叉树来说,能够将其数据元素逐层存放到一组连续的存储单元中,如图6-3 所看到的. 用一维数组来实现顺序存储结构时.将二叉树中编号为i 的结点存放到数组中的第i 个分量中.如此依据性质6.7,能够得到结点i 的父结点.左右孩子结点分别存放在.2i 以及2i+1 ?i / 2? 分量中. 图6-3 顺序存储结构 这样的存储方式对于满二叉树和全然二叉树是非常合适也是高效方便的.由于满二叉树和全然二叉树採用顺序存储结

js树形结构-----二叉树增删查

function BinarySearchTree(){ var cnodes = function(key){ this.key = key; this.left = null; this.right = null; } var root = null; this.insert = function(key){ var nodes = new cnodes(key); if(root === null){ root = nodes; }else{ insertNode(root,nodes);

(数据结构第六章)二叉树的顺序存储结构

二叉树的五条性质: 1.在二叉树的第i层上至多有2^(i-1)个节点(i>=1) 2.深度为k的二叉树至多有2^k-1个节点(k>=1) 3.对任何一个二叉树T,如果其终端节点数为n0,度为2的节点数为n2,则n0=n2+1. 证:总结点数n=n0+n1+n2 设分支总数B,n=B+1 B=n1+n2:两式加减即证出. 补充个定义:节点拥有的子树数称为节点的度. 树的度是树内各节点度的最大值. 4.具有n个节点的完全二叉树的深度为floor(log(2)n)+1 5.如果对一颗有n个节点的完全

【数据结构】树与树的表示、二叉树存储结构及其遍历、二叉搜索树、平衡二叉树、堆、哈夫曼树与哈夫曼编码、集合及其运算

1.树与树的表示 什么是树? 客观世界中许多事物存在层次关系 人类社会家谱 社会组织结构 图书信息管理 分层次组织在管理上具有更高的效率! 数据管理的基本操作之一:查找(根据某个给定关键字K,从集合R 中找出关键字与K 相同的记录).一个自然的问题就是,如何实现有效率的查找? 静态查找:集合中记录是固定的,没有插入和删除操作,只有查找 动态查找:集合中记录是动态变化的,除查找,还可能发生插入和删除 静态查找--方法一:顺序查找(时间复杂度O(n)) int SequentialSearch(St

数据结构 - 二叉树的存储结构

顺序存储结构 二叉树存储结构的类型定义: #define MAX_SIZE 100 typedef telemtype sqbitree[MAX_SIZE]; 用一组地址连续的存储单元依次"自上而下.自左至右"存储完全二叉树的数据元素. 对于完全二叉树上编号为i的结点元素存储在一维数组的下标值为i-1的分量中,如图6-6(c)所示. 对于一般的二叉树,将其每个结点与完全二叉树上的结点相对照,存储在一维数组中, 链式存储结构 设计不同的结点结构可构成不同的链式存储结构. (1) 结点的类

二叉树的二叉链表存储结构

一.二叉树的二叉链表存储结构 二叉树的二叉链表存储结构及其操作应用广泛,各大IT公司面试的时候都很喜欢考察二叉树的奇异操作,但是万变不离其宗,只要熟练掌握二叉树的二叉链表存储结构及其基本操作,其它奇异操作根据需要进行变换即可.如下所示: typedef char TElemType; TElemType Nil = ' '; typedef struct BiTNode { TElemType data; // 结点的值 BiTNode *lchild, *rchild; // 左右孩子指针 }

数据结构--树(上)-- 二叉树及存储结构

二叉树及存储结构 二叉树的定义:一个有穷的结点集合.若不为空,则它是由根节点和称为其左子树和右子树的两个不想交的二叉树组成 一般的左右的树是没有左右之分的.二叉树有左右之分. 三种特殊的二叉树 斜二叉树         实质就可以是链表了. 完美二叉树 完全二叉树 二叉树的几个重要的性质 二叉树的抽象数据类型 对二叉树来讲,最重要的就是Traversal() 遍历,讲二叉树基本就讲遍历了. 二叉树的存储结构 顺序存储结构 顺序存储结构 可以存储完全二叉树:从上往下,从左往右,来进行便利.把这种树

二叉树及存储结构

本文的结构: 二叉树的基本形态 二叉树的重要性质 二叉树的抽象数据类型定义 二叉树的存储结构 二叉树T:一个有穷的节点集合.这个集合可以为空,若不为空,则它是由根节点和称为其左子树TL和右子树TR的两个不相交的二叉树组成 二叉树的五种基本形态: (a) 空树 (b) 有一个结点 (c) 右子树为空 (d) 左子树为空 (e) 有左右子树 二叉树的重要性质: 一个二叉树第i层的最大节点数为:2i-1,i >=1; 深度为k的二叉树有最大结点总数为 2k-1,k>=1: 对任何非空二叉树T,若n0

树和二叉树

以下的内容做为学习笔记,复制别人的,感觉总结的比较好: 第5章 树和二叉树 本章中主要介绍下列内容:  1.树的定义和存储结构  2.二叉树的定义.性质.存储结构  3.二叉树的遍历.线索算法  4.树和二叉树的转换  5.哈夫曼树及其应用课时分配:     1.2两个学时,3四个学时,4两个学时, 5两个学时,上机两个学时重点.难点:     二叉树的遍历.线索算法.哈夫曼树及其应用 第一节 树 1.树的定义和基本运算1.1 定义    树是一种常用的非线性结构.我们可以这样定义:树是n(n≥

C++链式二叉树

BiTree: 1 //链式结构二叉树 2 #include<iostream> 3 using namespace std; 4 #define MAXSIZE 100 5 typedef char ElemType; 6 7 typedef struct BitNode 8 { 9 ElemType data; 10 BitNode *lchild; 11 BitNode *rchild; 12 }*BiTree; 13 14 //构造空二叉树T 15 void InitBiTree(Bi