数据结构学习之二叉树(JAVA)

数据结构学习成果二叉树部分分享:
此博客内容目录:

基本概念

树是n(n>=0)个结点的有限集,当n=0时,称为空树。
图解:
在这里插入图片描述

1.结点A称为‘根’,一棵树中有且只有一个 根,即为该树的根节点
2.树是一种递归的数据结构,每一个结点都可以形成以他为根节点的子树
3.与结点A直接相连的结点B、C、D为后继结点,又称为结点A的孩子,结点A是他们的父亲
4.结点B、C、D互为彼此的兄弟结点,自然结点F与结点H互为堂兄弟
5.从根A到结点K的唯一路上的任意结点,称为结点K的祖先,例如结点B是结点K的祖先,自然结点K是结点B的子孙
6.没有孩子的结点称为树叶
7.树中一个结点的孩子个数称为该结点的度,树中结点的最大度数称为树的度
8.树的高度(或深度)是树中结点的最大层数。
9.树的宽度是具有最多结点数的层中包含的结点数。
10.两个结点之间所经过的结点序列构成路径,树中的路径是从上到下的,同一父亲的两个孩子之间不存在路径。

森林是m(m>=0)棵互不相交的树的集合。

基本实现

class TreeNode{
   
Object element;
TreeNode parent;
List<TreeNode> children;

public TreeNode(Object element){
   
this.element = element;
this.parent = new TreeNode();
this.children = new Linkedlist<TreeNode>();
}
}

二叉树

基本概念

二叉树即为一棵每个结点都不能有多于两个孩子的特殊类型的树。
图像:
在这里插入图片描述

特性:
二叉树是有序树,即区分左子树和右子树,若左、右子树颠倒,则成为另一棵不同的二叉树。

基本实现

 class TreeNode {
   

      int value;
      TreeNode left;
      TreeNode right;
      public TreeNode(int data) {
   
         left = null;
         right = null;
         this.value = data;
       }
}

特殊二叉树

1.满二叉树
树中的每层都含有最多的结点
图解:
在这里插入图片描述代码:判断一棵二叉树是否为满二叉树

public static void main(String[] args) {
   

        TreeNode root = new TreeNode(1);
        root.left =  new TreeNode(2);
        root.right =  new TreeNode(3);
        root.left.left =  new TreeNode(4);
        root.left.right =  new TreeNode(5);
        root.right.left =  new TreeNode(6);
        root.right.right = new TreeNode(7);

        System.out.println(isFull(root));      //true

    }

public static class ReturnData{
   
        public int height;        //高度
        public int nodes;         //结点数

        public ReturnData(int h,int n){
   
            height = h;
            nodes = n;
        }
    }

    public static boolean isFull(TreeNode root){
   
        if (root==null){
   
            return true;
        }
        ReturnData data = process(root);
        //return data.nodes == (1<< data.height)-1;
        return data.nodes == Math.pow(2,data.height)-1;
    }

    public static ReturnData process(TreeNode root){
   
        if (root==null){
   
            return new ReturnData(0,0);
        }
        ReturnData leftData = process(root.left);
        ReturnData rightData = process(root.right);

        int height = 
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值