zoukankan      html  css  js  c++  java
  • 二叉树的学习

    二叉树的划分

    -----------------------------------

    二叉树分为 一般二叉树,满二叉树,完全二叉树。

    一般二叉树就是普通的二叉树。

    满二叉树,是所有节点全部存满的二叉树。

    完全二叉树是在满二叉树的前提下,从右边砍掉一些节点的结果。为什么要有完全二叉树,是因为二叉树需要转换成线性结构储存。

    普通树转换为二叉树

    -----------------------------------

    上面是普通树,下面是转换后的二叉树

    转换遵循: 左子树为它的孩子(childen子节点),右子树为它的兄弟(就是旁边的节点)。

    转换后就是这样,这个转换比较精妙。另外森类型的转换也和这个转换一样。

    二叉树的先序遍历,中序遍历,后序遍历

    -----------------------------------

    先序遍历的规则是:自己-左子树-右子树

    中序遍历:左子树-自己-右子树

    后序遍历是:左子树-右子树-自己

    可以发现,都是按照先序遍历的标准,然后调换顺序。

    以上图为例

    先序遍历:A-B-D-E-C-F-G-H

    中序遍历:D-B-E-A-F-C-G-H

    后序遍历:D-E-B-F-H-G-C-A

    主要还是用递归程序的思路去想,容易理解一些。它是一层一层的

    知道两种遍历结果,求树的形状

    -----------------------------------

    据说面试经常面这个。。不过只是据说。。

    必须是知道先序,中序或者中序,后序的情况下。才能还原二叉树

    为什么?因为只知道一种遍历情况,不知道接下去的情况是左子树遍历完了,已经遍历到右子树了,还是左子树没遍历完。

    而只知道先序,后序的时候,无法分辨谁是最外侧的左子树,和最外侧的右子树。所以不行

    知道先序,中序 求树的形状

    后续和中序,只要知道后续最后一个肯定是最外面的根。以此类推就行了。

  • 相关阅读:
    Go 语言简介(下)— 特性
    Array.length vs Array.prototype.length
    【转】javascript Object使用Array的方法
    【转】大话程序猿眼里的高并发架构
    【转】The magic behind array length property
    【转】Build Your own Simplified AngularJS in 200 Lines of JavaScript
    【转】在 2016 年做 PHP 开发是一种什么样的体验?(一)
    【转】大话程序猿眼里的高并发
    php通过token验证表单重复提交
    windows 杀进程软件
  • 原文地址:https://www.cnblogs.com/hont/p/3059325.html
Copyright © 2011-2022 走看看