小工具知识网

当前位置: 首页 > 行业知识 > 颠仆流离学二叉树1 (Java版)

行业知识

颠仆流离学二叉树1 (Java版)

2026-10-26 23:33:43 来源:互联网转载

本篇会加入个人的所谓鱼式疯言

❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言

而是理解过并总结出来通俗易懂的大白话,

小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.

可能说的不是那么严谨.但小编初心是能让更多人能接受我们这个概念 !!!

前言

学完了神奇的 栈和队列 , 接下来要来到我们 歇斯底里,颠仆流离的 二叉树 环节 , 相信学过 二叉树的 小伙伴,应该 对这个数据结构不陌生吧 , 是不是恐怖如斯 啊, 下面就让我们看看它到底有多恐怖吧

目录

  1. 树的初识

  2. 二叉树的初识

  3. 二叉树的特性以及应用

  4. 二叉树的存储

一. 树的初识

1. 树是概念

树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。

把它叫做树是因为它看起来像一棵 倒挂的树,也就是说它是 根朝上 ,而 叶朝下的 。它具有以下的特点:

  • 有一个特殊的结点,称为 根结点 ,根结点没有 前驱结点

  • 除根结点外,其余结点被分成M(M > 0)个互不相交的集合 T1、T2、…、Tm,其中每一个 集合Ti (1 int value; // 树中存储的数据Node firstChild; // 第一个孩子引用Node nextBrother; // 下一个兄弟引用}pimg src="https://m.xiaogongju.com.cn/uploads/allimg/20250421/-25042123254T35.png" //p h34. 树的应用/h3 p文件系统管理**(目录和文件)**/p pimg src="https://m.xiaogongju.com.cn/uploads/allimg/20250421/-250421232549196.png" //p pimg src="https://m.xiaogongju.com.cn/uploads/allimg/20250421/-250421232549214.png" //p h2二. 二叉树/h2 h31. 二叉树的概念/h3 p一颗二叉树是节点的有限集合,该集合:/p olli p或者为空/p /lili p或者是由一个mark根节点/mark加上两颗称为 左子树 和 右子树 的二叉树组成/p /li/ol pimg src="https://m.xiaogongju.com.cn/uploads/allimg/20250421/-250421232550X2.png" //p p从上图可以看出/p olli p二叉树 mark不存在度大于 2 的节点/mark/p /lili p二叉树的字数有左子树和右子树之分,mark次序不能颠倒/mark,因此 二叉树是有序树/p /li/ol p所以我们可以得到以下 几种二叉树/p pimg src="https://m.xiaogongju.com.cn/uploads/allimg/20250421/-2504212325504S.png" //p p由此我们可以见识到大自然的 奇观/p pimg src="https://m.xiaogongju.com.cn/uploads/allimg/20250421/-250421232552103.png" //p pimg src="https://m.xiaogongju.com.cn/uploads/allimg/20250421/-250421232553425.png" //p h32. 二叉树的种类/h3 olli p满二叉树: 一棵二叉树,如果每层的结点数都达到最大值,则这棵二叉树就是 满二叉树。也就是说,如果一棵二叉树的层数为 K,且结点总数是 2^k-1,则它就是 mark满二叉树/mark。/p /lili p完全二叉树 : 完全二叉树 : 完全二叉树的是 效率很高 的数据结构, ,完全二叉树是由 满二叉树 而引出来的。对于 mark深度为K/mark 的,有 n 个结点的 二叉树 ,当且仅当其 mark每一个结点都与深度为K/mark 的满二叉树中编号从 0至n-1 的结点一一对应时称之为 完全二叉树 。/p /li/ol p要注意的是满二叉树是一种 mark特殊的完全二叉树/mark。/p pimg src="https://m.xiaogongju.com.cn/uploads/allimg/20250421/-2504212325534R.png" //p h3鱼式疯言/h3 p一句话来说就是/p p满二叉树就是每个节点度都为 2 (除了叶子节点)/p p完全二叉树就是 mark从上往下数/mark 没有间断的节点,mark从左往右/mark 没有间断 的节点./p h2三. 二叉树的特性及应用/h2 h31. 二叉树的性质/h3 blockquote olli若规定根结点的层数为 1,则一棵 非空二叉树的第 i 层 上最多有 mark2 ^ (i-1) (i>0) 个结点

  1. 若规定只有根结点的二叉树的 深度为1 ,则深度为 K的二叉树的最大结点数是 2^K - 1 (k>=0)
  1. 对任何一棵二叉树, 如果其叶结点个数为 n0 , 度为 2 的非叶结点个数为 n2 ,则有 n0=n2+1

结论的推导过程 :

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

什么? 居然有人问我 向上取整 是什么 ?

向上取整 的意思就是说,当这个数有小数的时候,就去掉 小数再 加1

  1. 对于具有 n个结点 的完全二叉树,如果按照从上至下从左至右的顺序对所有节点 从 0开始编号 ,则对于 序号为 i 的结点有:

若 i>0,双亲序号:(i-1)/2;i=0,i为根结点编号,无双亲结点

若 2i+1int val; // 数据域Node left; // 左孩子的引用,常常代表左孩子为根的整棵左子树Node right; // 右孩子的引用,常常代表右孩子为根的整棵右子树}// 孩子双亲表示法class Node {int val; // 数据域Node left; // 左孩子的引用,常常代表左孩子为根的整棵左子树Node right; // 右孩子的引用,常常代表右孩子为根的整棵右子树Node parent; // 当前节点的根节点}public static class BTNode{BTNode left;BTNode right;int value;BTNode(int value){this.value = value;}}private BTNode root;public void createBinaryTree(){BTNode node1 = new BTNode(1);BTNode node1 = new BTNode(2);BTNode node1 = new BTNode(3);BTNode node1 = new BTNode(4);BTNode node1 = new BTNode(5);BTNode node1 = new BTNode(6);root = node1;node1.left = node2;node2.left = node3;node1.right = node4;node4.left = node5;node5.right = node6;}}

上一篇:怎么生成雪狐?

下一篇:Redis快速入门及在Java中使用Redis