风也温柔

计算机科学知识库

【干货】Java数据结构之二叉树的多种遍历方式

树在数据结构中占有非常重要的位置,尤其是二叉树。往往是Java面试中必问的部分,二叉树的应用场景确实很常见,需要掌握。
长期以来java二叉树遍历算法,很多同学并没有全面掌握二叉树。今天我将讨论二叉树。我希望你喜欢这个关于 Java 数据结构和算法的话题。仔细阅读后,你会对二叉树有一个比较完整的了解。

将强调以下几点:

1.什么是二叉树

二叉树:是一种树形结构,每个节点只能有两个子节点,俗称“大裤衩”,具有特殊的形象。
通常子树被称为“左子树”(left)和“右子树”(right)。
你可以在下面的图片中看到它。
134fab5f1dcad0e825519d28531f0b5c.png
2.二叉树遍历方法
2.1 二叉树遍历主要有以下三种:
7a618efcff85661db945e4ef879c1554.png
第一(根)顺序遍历(根左右)
中(根)顺序遍历(左根右)
3) post(root)中序遍历(左右根)
2.2 前序遍历(围绕根)
我将从第一个预购遍历开始。主要遍历顺序如下:
1)先访问根节点
2)然后按前序遍历左子树
3)然后按前序遍历右子树
或者举个例子,遍历下图
c168716bdac67d6d0750b75e48202a94.png
如果按前序(根左和右)遍历java二叉树遍历算法,结果将是:

  2.3 中序遍历(左根右)

  1)中序遍历左子树

  2)然后是根节点

  3)然后依次遍历右子树

  或者举个例子,中序遍历同一个二叉树

  1562168b46f8a58ed5d05097eeaf2965.png

  中序(左根右)遍历,结果为:

  2.4 后序遍历

  1) 左子树的后序遍历

  2) 右子树的后序遍历

  3)然后访问根节点

  或者举个例子,同一个二叉树的后序遍历

  7ccee519db24bdcf8f93b30209e0f1fb.png

  后序遍历(左右根)会导致:

  3.二叉树的类型

  d756c8a788360bdf0298b3ad88796b34.png

  基本上包括:

  我将从一个完整的二叉树开始。

  3.1 个完整的二叉树

  1)全二叉树

  深度为 k 和 2^k-1 个节点的树是完整的二叉树

  2)满二叉树的形式

  c5bdd72554597a47ad42e7827569d937.png

  3)满二叉树的特征

  所有内部节点都有两个子节点,最底层是叶子节点。

  如果一棵树的深度为h,则最大层级为k,深度与最大层级相同,即k=h;

  第k层的节点数为:2^(k-1)

  总结点是:2^k-1(2的k次幂减一)

  节点总数必须是奇数。

  树高:h=log2(n+1)

  3.2.完全二叉树

  1)完全二叉树

  如果二叉树的深度设置为h,除第h层外,其他层的节点数(1~h-1)达到最大数,h中的所有节点-th层不断地集中在最左边,这是一棵完全二叉树。

  2)完全二叉树的形式

  84979570730cd7d5c2b2e188faa8c170.png

  3)完全二叉树的特征

  一棵深度为 k 的完全二叉树至少有 2^(k-1) 个节点,最多有 2^k-1 个节点。

  树高 h=log2n + 1

  满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树

  3.3.二叉搜索/搜索/排序树 - BST

  用文字描述先(根)序的遍历二叉树算法算法,中(根)序的遍历二_二叉树的遍历算法 java_java二叉树遍历算法

  1)二叉搜索树

   Tree BST(/排序树),又称二叉搜索树、二叉排序树

  备注:下面我将二叉查找树统称为二叉查找树,但要知道二叉查找树、二叉查找树、二叉排序树其实是一棵树。

  2)二叉搜索树的特征

  5b854d1561985eae04fb176a8ceb0634.png

  3)二叉搜索树的优缺点

  优点:查找速度快,二叉查找树比普通树查找要快

  缺点:平衡问题

  多次插入和删除后,二叉搜索树可能会得到如下右侧的结构:

  04f4eec01ec0672a4b17fe25d81ac9a9.png

  搜索性能已经是线性的。因此,在使用二叉搜索树的时候,要尽量保持上图左图的结构,避免上图右图的结构,也就是所谓的“平衡”问题。

  4)二叉搜索树的时间复杂度

  时间复杂度

  二叉查找树比普通树查找要快,查找、插入、删除的时间复杂度为O(logN)。

  缺点

  二叉搜索树有一个极端的情况,就是会变成类似线性链表的结构。这时候时间复杂度会变成O(N)。为了解决这种情况,下面我要讲的出现了。二叉平衡树。

  注:时间复杂度

  3.4.平衡二叉树(AVL树)

  1)平衡二叉树

  平衡二叉树 平衡二叉搜索树的全称,也叫AVL树,是一种自平衡树。它是从上面的二叉搜索树升级而来的,重点是改善平衡问题。

  2)平衡二叉树的特征

  0d9e98669ba46b6835223a2cd04febfc.png

  3)AVL树是如何解决平衡的

  主要是通过左旋和右旋来解决,防止在特殊情况下出现下面的线性结构。

  e3251c64c186b5e80d3a2010f4dbed8c.png

  因此,上面的平衡问题通过下图的左旋和右旋来解决。

  5eb454c408495ba3b5b4416ed106524f.png

  805f97ecb00e86456b0892441416638b.png

  但是,也有相应的缺点。由于需要保持自身的平衡,在插入和删除节点时【干货】Java数据结构与二叉树的区别,你知道吗?,需要经常轮换节点。

  4.结束语

  通过上面的介绍,我们已经对二叉树有了一个初步的了解。本文介绍的基础知识希望读者能牢牢掌握,并能在脑海中构建二叉树模型,为后续学习数据结构和算法打下坚实的基础。

  原文链接:

  文章来源:https://blog.csdn.net/weixin_39648824/article/details/110614342