常见的数据结构:树Tree

目录

1.概念

[1.1 满二叉树](#1.1 满二叉树)

[1.2 完全二叉树](#1.2 完全二叉树)

[1.3 平衡二叉树](#1.3 平衡二叉树)

2.遍历方式

[2.1 先序遍历](#2.1 先序遍历)

[2.2 中序遍历](#2.2 中序遍历)

[2.3 后序遍历](#2.3 后序遍历)

[2.4 层序遍历](#2.4 层序遍历)

1.概念

原理:一种特殊的数据结构,每个节点有零个或多个子节点;没有父节点的节点称为根节点;每一个非根节点有且只有一个父节点;除了根节点外,每个子节点可以分为多个不相交的子树

二叉树的分类:满二叉树、完全二叉树、平衡二叉树

存储方式:数组或者链表实现

遍历方式:先序遍历、中序遍历、后序遍历、层序遍历

1.1 满二叉树

二叉树的每一层节点树都达到最大值,就叫做满二叉树

数学表示:层数为 K,结点总数就为(2^k) -1

1.2 完全二叉树

二叉树除了最后一层外,其余层都是满二叉树,且最后一层是满的或者是右边缺少若干节点

1.3 平衡二叉树

树的左右子树的高度差绝对值不超过1,且左右子树也为平衡二叉树

2.遍历方式

2.1 先序遍历

先输出根节点,然后遍历左子树,最后遍历右子树

代码示例:

java 复制代码
public void preOrder(TreeNode root){
	if(root == null){
		return;
	}
	system.out.println(root.data);
	preOrder(root.left);
	preOrder(root.right);
}

2.2 中序遍历

先遍历左子树,然后遍历根节点,最后遍历右子树

java 复制代码
public void inOrder(TreeNode root){
	if(root == null){
		return;
	}
	inOrder(root.left);
	system.out.println(root.data);
	inOrder(root.right);
}

2.3 后序遍历

先遍历左子树,然后遍历右子树,最后遍历根节点

java 复制代码
public void postOrder(TreeNode root){
	if(root == null){
		return;
	}
	postOrder(root.left);
	postOrder(root.right);
	system.out.println(root.data);
}

2.4 层序遍历

按照层级遍历,逐层从左到右访问所有节点

java 复制代码
public List<List<Integer>> levelOrder(TreeNode root){
    //用一个二维数组存储最终层序遍历出的元素
    List<List<Integer>> result = new ArrayList<>();
    if(null == root){
        return result;
    }
    
    //创建一个队列用来存入树节点
    Queue queue = new LinkedList();
    queue.add(root);

    while(!queue.isEmpty){
        int len = queue.size();
        List<Integer> list= new ArrayList();
        while(len > 0){
            TreeNode temp = queue.poll();
            list.add(temp.val);
            
            //如果节点左右有值就加入队列
            if(temp.left != null){
                queue.add(temp.left);
            }
            if(temp.right!= null){
                queue.add(temp.right);
            }
            len --;
        }
        result.add(list);
    }
    return result;
}
相关推荐
朝朝又沐沐3 小时前
算法竞赛阶段二-数据结构(36)数据结构双向链表模拟实现
开发语言·数据结构·c++·算法·链表
艾莉丝努力练剑4 小时前
【数据结构与算法】数据结构初阶:详解排序(二)——交换排序中的快速排序
c语言·开发语言·数据结构·学习·算法·链表·排序算法
科大饭桶5 小时前
数据结构自学Day13 -- 快速排序--“前后指针法”
数据结构·算法·leetcode·排序算法·c
设计师小聂!7 小时前
力扣热题100----------53最大子数组和
java·数据结构·算法·leetcode
YouQian7727 小时前
问题 C: 字符串匹配
c语言·数据结构·算法
yanxing.D7 小时前
408——数据结构(第二章 线性表)
数据结构·算法
艾莉丝努力练剑8 小时前
【LeetCode&数据结构】二叉树的应用(二)——二叉树的前序遍历问题、二叉树的中序遍历问题、二叉树的后序遍历问题详解
c语言·开发语言·数据结构·学习·算法·leetcode·链表
waveee1239 小时前
学习嵌入式的第三十三天-数据结构-(2025.7.25)服务器/多客户端模型
服务器·数据结构·学习
花开富贵ii10 小时前
代码随想录算法训练营二十八天|动态规划part01
java·数据结构·算法·leetcode·动态规划
Swiler11 小时前
数据结构第1问:什么是数据结构?
数据结构·算法