美文网首页
二叉树基础

二叉树基础

作者: 慧鑫coming | 来源:发表于2019-02-11 08:04 被阅读0次

相关概念

  • 根节点:没有父节点的结点。
  • 叶子节点:没有子节点的结点。
  • 高度:节点到叶子节点的“最长路径”(边数)。
  • 深度:根节点到这个节点所经历的“边的个数”。
  • 层:节点的深度+1。
  • 树的高度:根节点的高度。
图片引自《数据结构与算法之美》王争

二叉树(Binary Tree)

  • 每个节点最多有两个“叉”,也就是两个子节点,分别是“左子节点”和“右子节点”;二叉树并不要求每个节点都有2个子节点。

满二叉树

  • 除叶子节点外,每个节点都有左右2个子节点。

完全二叉树

  • 叶子节点都在最底下2层,且最后一层的叶子节点都靠左排列,并且除了最后一层,其他层的节点个数都要达到最大。

二叉树的存储方法

  • 链式存储法
    基于指针,每个节点有3个字段,有个存储数据,另外两个是指向左右子节点的指针。
  • 顺序存储方法
    基于数组,节点 X 存储在数组中下标为 i 的位置,下标为2*i的位置存储的就是其左子节点,下标为2*i+1的位置存储的就是其右子节点。此时,如果被存储的树是一棵完全二叉树,用数组存储是最节省内存的一种方式。“堆”其实就是一种完全二叉树,最常用的存储方式是数组。

二叉树的遍历

  • 前序遍历
    对于树中的任意节点来说,先打印这个节点,然后再打印它的左子树,最后打印它的右子树。
preOrder(r) = print r -> preOrder(r->left) -> preOrder(r->right)
  • 中序遍历
    对于任意节点来说,先打印它的左子树,然后打印它本身,最后打印它的右子树。
inOrder(r) = inOrder(r->left) -> print r -> inOrder(r->right)
  • 后序遍历
    对于任意节点来说,先打印它的左子树,再打印它的右子树,最后打印这个节点本身。
postOrder(r) = postOrder(r->left) -> postOrder(r->right) -> print r

二叉树遍历的时间复杂度

  • 每个节点最多会被访问2次,所以遍历操作的时间复杂度和节点个数n成正比,也就是说二叉树遍历的时间复杂度是O(n)。

相关文章

  • LeetCode基础算法-树

    LeetCode基础算法-树 LeetCode 树 基础算法 1. 二叉树的最大深度 给定一个二叉树,找出其最大深...

  • 树数据结构-力扣刷树题需要知道的(Python)

    树是一种重要的数据结构,而二叉树是其中的重点和难点,有关二叉树的基础知识,读者可移步【二叉树基础】查看更多内容。这...

  • 二叉树的基本算法

    二叉树的基本算法 树、二叉树 的基本概念,参考数据结构算法之美-23讲二叉树基础(上):树、二叉树[https:/...

  • Java后端开发算法基础面试题分享,你离大厂也许就差这份面试题!

    一、算法基础 1. 重建二叉树 题目: 输入一棵二叉树前序遍历和中序遍历的结果,请重建该二叉树。 注意: 二叉树中...

  • 二叉树知识(BST) 二叉查找树(Binary Search T

    二叉树基础知识总结 - CSDN博客 二叉树遍历分析 简单二叉树遍历,可分为:先序,中序,后序。 先序: 1.访问...

  • 二叉树非递归遍历

    二叉树的非递归遍历 二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有...

  • 数据结构第三次作业

    第一题:二叉树的基础算法 题目 先根据二叉树的先序、中序遍历序列还原该二叉树,求出这棵二叉树的高度和宽度,以及其叶...

  • Avl平衡树--C语言实现

    Avl 平衡树 实现记录 Avl平衡二叉树和搜索二叉树基本实现原理相同,在搜索二叉树的基础上添加树平衡的操作--单...

  • 二叉树的遍历

    关于二叉树的算法问题,一般都以二叉树的遍历为基础,这里给出二叉树的多种遍历方式 树结构: 树结点的定义及其构建: ...

  • 学习清单

    算法、数据结构二叉树、链表、栈... golang基础 swoole mysql websocket

网友评论

      本文标题:二叉树基础

      本文链接:https://www.haomeiwen.com/subject/xcensqtx.html