java中的二叉树

二叉树的理论基础

二叉树的种类

  • 满二叉树:一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。
    深度为k,有2^k-1个节点

  • 完全二叉树:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2^h -1 个节点。
    在这里插入图片描述

  • 二叉搜索树:二叉搜索树是一个有序数,有数值
    1 若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
    2 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
    3 它的左、右子树也分别为二叉排序树
    在这里插入图片描述

  • 平衡二叉搜索树(Adelson-Velsky and Landis: AVL):它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
    在这里插入图片描述
    C++中map、set、multimap,multiset的底层实现都是平衡二叉搜索树,所以map、set的增删操作时间时间复杂度是logn,注意我这里没有说unordered_map、unordered_set,unordered_map、unordered_map底层实现是哈希表。

二叉树的存储方式

  • 链式存储:指针
    在这里插入图片描述
  • 顺序存储:数组
    在这里插入图片描述

二叉树的遍历方式

  • 深度优先遍历
    前序遍历(中左右)
    中序遍历(左中右)
    后序遍历(左右中)
    在这里插入图片描述
  • 广度优先遍历
    层次遍历(迭代法)

二叉树的定义

public class TreeNode {
    int val;
  	TreeNode left;
  	TreeNode right;
  	TreeNode() {}
  	TreeNode(int val) { this.val = val; }
  	TreeNode(int val, TreeNode left, TreeNode right) {
    		this.val = val;
    		this.left = left;
    		this.right = right;
  	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值