【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(二)

看到这句话的时候证明:此刻你我都在努力

加油陌生人

个人主页:Gu Gu Study
专栏:用Java学习数据结构系列
喜欢的一句话: 常常会回顾努力的自己,所以要为自己的努力留下足迹

喜欢的话可以点个赞谢谢了。
作者:小闭

前言

今天这篇文章是二叉树的第二篇文章,上一篇文章已经简单讲述了二叉树的各种遍历方法了,那么接下来就需要进阶一下,开始用二叉树的知识解决更多问题。如有哪里出现错误也欢迎指出唔。

那么我们先来开始我们今天的第一道小菜。

根据中序遍历和后序遍历写出前序遍历

设一课二叉树的 中序遍历序列:badce,后序遍历序列:bdeca

那么我们如何下手呢?首先我们先根据我们的知识来得出一些关键点。

  1. 后序遍历的最后一个节点就是根节点
  2. 那么我们就可以根据根节点在中序遍历中得出树的左右两边的节点
  3. 根据得出的信息开始逐渐还原树的样子,然后就可以根据树的样子得出前序遍历的顺序。

根据信息得出树,然后核对一下已知的连个遍历序列是否正确,如果正确那么我们就可以写出前序遍历的顺序了。

获取树的节点个数

我们既然要获取节点个数那么肯定需要我们取遍历这棵树了,除非你在这棵树创建加了个size变量来计数。

那么如果我们的树没有定义一个计数变量我们就必须得遍历这棵树了。

int size(BTNode root) {
    if (root == null) {
        return 0;
    }

    return size(root.left) + size(root.right) + 1;

}

我采用的是递归的方法,假设把每个节点都当作根节点(即假设该