树论基础-二叉树

本文介绍了树形结构中的关键术语,如结点、子树、度等,并重点讲解了二叉树的基本概念,包括满二叉树、完全二叉树以及二叉搜索树等。此外,讨论了二叉树的存储方式,特别是数组和链表的应用,强调了完全二叉树使用数组存储的效率优势。最后,概述了二叉树的四种遍历方法:前序、中序、后序和层次遍历。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
在树形结构里面有几个重要的术语:
1.结点:树里面的元素。
2.父子关系:结点之间相连的边
3.子树:当结点大于1时,其余的结点分为的互不相交的集合称为子树
4.度:一个结点拥有的子树数量称为结点的度
5.叶子:度为0的结点
6.孩子:结点的子树的根称为孩子结点
7.双亲:和孩子结点对应
8.兄弟:同一个双亲结点
9.森林:由N个互不相交的树构成森林

在树形结构里面有几个重要的术语:
结点的高度:结点到叶子结点的最长路径
结点的深度:根结点到该结点的边个数
结点的层数:结点的深度加1
树的高度:根结点的高度

常见的二叉树:
满二叉树
完全二叉树:堆–>大顶堆、小顶堆
二叉搜索树 BST
平衡二叉树 AVL
红黑树
B-Tree、B+Tree:多叉树

在树形结构中最重要的就是二叉树,很多经典的算法与数据结构其实都是通过二叉树发展而来。

Binary Tree:一种特殊的树形结构,每个节点至多只有两颗子树。
在二叉树的第N层上至多有2(N-1) 个结点。最多有2N -1个结点个数。
**满二叉树:**除叶子结点外,每个结点都有左右两个子结点。
完全二叉树:除最后一层外,其他的结点个数必须达到最大,并且最后一层结点都连续靠左排列

为什么要分满二叉树和完全二叉树呢?因为通过定义可以看出,完全二叉树只是满二叉树里面的一个子集
要想清楚上面那个问题我们要从树形结构的存储开始:
基于数组存储:利用数组下标。假设A为i,则B=2i,C=2i+1,依次类推
但是假如是下面这种结构,用数组存储会发生什么情况?
在这里插入图片描述

你会发现如果用数组来存储的话会浪费很多空间,那怎么办呢?
大家最先想到的肯定是链表,对的,
是要借用链表来实现,但是数组的性能是高效的(利用了cpu缓存),也不需要开额外的指针,所以如果是一课完全
二叉树的话我们就可以用数组来实现,这也是为什么还要分一个完全二叉树出来的根本原因。
请添加图片描述

二叉树的遍历
在这里插入图片描述
四种遍历方式:
重要口诀:根节点输出!子树
前序:根 左 右 ABCDEFGHK
中序:左 根 右 BDCAEHGKF
后序:左 右 根 DCBHKGFEA
层次:从上到下,从左至右

package org.apache.ibatis.mytest;

import java.util.LinkedList;

class MyTreeNode{
   
	
	private char data;
	private MyTreeNode left;
	private MyTreeNode right;
	

	public MyTreeNode(char data, MyTreeNode left, MyTreeNode right) {
   
		super();
		this.setData(data);
		this.setLeft(left);
		this.setRight(right);
	}
	public char getData() {
   
		return data;
	}
	public void setData(char data) {
   
		this.data = data;
	}
	public MyTreeNode getLeft() {
   
		return left;
	}
	public void setLeft(MyTreeNode left) {
   
		this.left = left;
	}
	public MyTreeNode getRight() {
   
		return right
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值