数据结构之二叉树(上)

简介: 数据结构之二叉树

🎈一.二叉树相关概念


1.树

树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合,树结构通常用来存储逻辑关系为 "一对多" 的数据。例如:

05a0c7b378d749c2b73aa67138d197bc.png

关于树的几个重要概念:

1)树的度:一棵树中,所有结点度的最大值称为树的度,如上图,这棵树的度为3;

2)节点的度:一个结点含有子树的个数称为该结点的度,如上图,A节点的度为3;

3)根节点:一棵树中,没有双亲结点的结点,如上图,A就是根节点;

4)叶子节点:简单来说,度为0的就是叶子节点,如上图,K,L,F,M等都是叶子节点;

5)树的高度或深度:树中结点的最大层次,如上图,树的高度为4;


那么什么是二叉树呢?

简单地理解,满足以下两个条件的树就是二叉树:

  1. 本身是有序树;
  2. 树中包含的各个节点的度不能超过 2,即只能是 0、1 或者 2;

如图:

50fff364f5574a88b968a87561c467c2.png


🎈二.二叉树的性质


1.若规定根结点的层数为1,则一棵非空二叉树的第i层上最多有 2^i-1(i>0)个结点;

2.若规定只有根结点的二叉树的深度为1,则深度为K的二叉树的最大结点数是2^k-1 (k>=0);

3. 对任何一棵二叉树, 如果其叶结点个数为 n0, 度为2的非叶结点个数为 n2,则有n0=n2+1;

✅关于此结论的推导:


对于任意一棵二叉树,一棵有N个节点的树就有N-1条边

假设度为0的节点为n0,度为1的节点为n1,度为2的节点为n2,度为0的节点没有边,度为1的节点有1条边,度为2的节点有2条边,由此可得:

N-1=n1*1+n2*2   ----------------产生的边的关系

N=n0+n1+n2       ----------------产生节点的关系

联立就可以得出这个结论:n0=n2+1


4.具有n个结点的完全二叉树的深度k为 log2(n+1)上取整;

✅习题:

1)  在具有 2n 个结点的完全二叉树中,叶子结点个数为(A);

A .n            B. n+1            C. n-1           D. n/2

解析:

8165b65066c9440da13b46133f0bfb90.png

完全二叉树分奇偶数俩种情况,如上图,本题有2n个节点,是偶数,那么度为1的节点数只有1个,所以可知:

2n=n0+n1+n2;

n0=n2+1;

代入可求:n0=n;


2)一个具有767个节点的完全二叉树,其叶子节点个数为(B);

A. 383         B. 384             C. 385           D. 386

解析:因为它是一棵完全二叉树,节点数为奇数,说明它是一棵满二叉树,所以没有度为1的节点,由此可知:

767=n0+n2;

n0=n2+1;

联立上式可以求出答案


🎈三.构造二叉树


二叉树的存储结构分为:顺序存储和类似于链表的链式存储。

构造一个类,里面存放左子树,右子树,数据域;

publicstaticclassTreeNode {
publiccharval;//数据域publicTreeNodeleft;//左节点publicTreeNoderight;//右节点publicTreeNode(charval) {
this.val=val;
        }
    }
//构造树publicTreeNodecreateTree() {
TreeNodenode1=newTreeNode('A');
TreeNodenode2=newTreeNode('B');
TreeNodenode3=newTreeNode('C');
TreeNodenode4=newTreeNode('D');
TreeNodenode5=newTreeNode('E');
TreeNodenode6=newTreeNode('F');
TreeNodenode7=newTreeNode('G');
node1.left=node2;
node1.right=node3;
node2.left=node4;
node2.right=node5;
node3.left=node6;
node3.right=node7;
returnnode1;
    }
}
目录
相关文章
|
13天前
|
存储 机器学习/深度学习
【数据结构】二叉树全攻略,从实现到应用详解
本文介绍了树形结构及其重要类型——二叉树。树由若干节点组成,具有层次关系。二叉树每个节点最多有两个子树,分为左子树和右子树。文中详细描述了二叉树的不同类型,如完全二叉树、满二叉树、平衡二叉树及搜索二叉树,并阐述了二叉树的基本性质与存储方式。此外,还介绍了二叉树的实现方法,包括节点定义、遍历方式(前序、中序、后序、层序遍历),并提供了多个示例代码,帮助理解二叉树的基本操作。
38 13
【数据结构】二叉树全攻略,从实现到应用详解
|
3月前
|
存储 算法
【数据结构和算法】--- 二叉树(4)--二叉树链式结构的实现(2)
【数据结构和算法】--- 二叉树(4)--二叉树链式结构的实现(2)
27 0
|
10天前
|
存储 算法 C语言
数据结构基础详解(C语言): 二叉树的遍历_线索二叉树_树的存储结构_树与森林详解
本文从二叉树遍历入手,详细介绍了先序、中序和后序遍历方法,并探讨了如何构建二叉树及线索二叉树的概念。接着,文章讲解了树和森林的存储结构,特别是如何将树与森林转换为二叉树形式,以便利用二叉树的遍历方法。最后,讨论了树和森林的遍历算法,包括先根、后根和层次遍历。通过这些内容,读者可以全面了解二叉树及其相关概念。
|
10天前
|
存储 机器学习/深度学习 C语言
数据结构基础详解(C语言): 树与二叉树的基本类型与存储结构详解
本文介绍了树和二叉树的基本概念及性质。树是由节点组成的层次结构,其中节点的度为其分支数量,树的度为树中最大节点度数。二叉树是一种特殊的树,其节点最多有两个子节点,具有多种性质,如叶子节点数与度为2的节点数之间的关系。此外,还介绍了二叉树的不同形态,包括满二叉树、完全二叉树、二叉排序树和平衡二叉树,并探讨了二叉树的顺序存储和链式存储结构。
|
10天前
|
存储 C语言
数据结构基础详解(C语言): 树与二叉树的应用_哈夫曼树与哈夫曼曼编码_并查集_二叉排序树_平衡二叉树
本文详细介绍了树与二叉树的应用,涵盖哈夫曼树与哈夫曼编码、并查集以及二叉排序树等内容。首先讲解了哈夫曼树的构造方法及其在数据压缩中的应用;接着介绍了并查集的基本概念、存储结构及优化方法;随后探讨了二叉排序树的定义、查找、插入和删除操作;最后阐述了平衡二叉树的概念及其在保证树平衡状态下的插入和删除操作。通过本文,读者可以全面了解树与二叉树在实际问题中的应用技巧和优化策略。
|
1月前
|
存储
【初阶数据结构篇】二叉树基础概念
有⼀个特殊的结点,称为根结点,根结点没有前驱结点。
|
1月前
|
存储 Linux Windows
【数据结构】二叉树
【数据结构】二叉树
|
1月前
|
存储 算法 Linux
【数据结构】树、二叉树与堆(长期维护)(1)
【数据结构】树、二叉树与堆(长期维护)(1)
|
1月前
|
算法
【数据结构】树、二叉树与堆(长期维护)(2)
【数据结构】树、二叉树与堆(长期维护)(2)
【数据结构】树、二叉树与堆(长期维护)(2)
|
1月前
|
算法 Java
数据结构二叉树
这篇文章讨论了数据结构中的二叉树,并提供了一个二叉树中序遍历的算法示例,包括给定二叉树的根节点返回中序遍历结果的Java代码实现。
数据结构二叉树