二叉树遍历

  首先来说一下二叉树的定义:二叉树是一个连通的无环图,并且每一个顶点的度不大于3;有根二叉树还要满足根结点的度不大于2。有了根结点之后,每个顶点定义了唯一的父结点,和最多2个子结点。二叉树不是树的特殊情形,尽管与树有许多相似之处,但树和二叉树 有两个主要的区别:1、树中节点的最大度数没有限制,而二叉树节点度数最大限制是2;2、树的节点无左右之分,而二叉树有。

  二叉树常被用作二叉查找树和二叉堆或是二叉排序树。二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2的 i -1次方个结点;深度为k的二叉树至多有2^(k) -1个结点;对任何一棵二叉树T,如果其终端结点数(即叶子结点数)为n0,度为2的结点数为n2,则n0 = n2 + 1。二叉树的链式存储结构是一类重要的数据结构。

  二叉树遍历:遍历是对树的一种最基本运算,所谓二叉树遍历,就是按照一定的规则和顺序走遍二叉树的所有节点,使每一个节点都被访问到,而且仅访问一次。由于二叉树是非线性结构,因此树的遍历实质上是将二叉树的各个节点转化为一个线性序列来表示。二叉树遍历主要分4种:先序遍历,中序遍历,后序遍历。层次遍历。

  先序遍历:首先访问根,再先序遍历左(右)子树,最后先序遍历右(左)子树。

  中序遍历:首先中序遍历左(右)子树,再访问根,最后中序遍历右(左)子树

  后序遍历:首先后序遍历左(右)子树,再后序遍历右(左)子树,最后访问根。

  层次遍历:即按照层次访问,通常用队列来做。访问根,访问子女,再访问子女的子女(越往后的层次越低)(两个子女的级别相同)。

  举例来说:

    

  图一的先序遍历:A-B-C-D-E-F-G  (根-左子树-右子树)

  图一的中序遍历:C-B-D-A-F-E-G (左子树-根-右子树)

  图一的后序遍历:C-D-F-G-B-E-A (左子树-右子树-根)

  图一的层序遍历:A-B-E-C-D-F-G (先遍历根再遍历子树)

            

                    图二

  图二的先序遍历:A-B-C-D-E-G-F  (根-左子树-右子树)

  图二的中序遍历:C-B-E-G-D-F-A(左子树-根-右子树)

  图二后序遍历:C-G-E-F-D-B-A(左子树-右子树-根)

  图二的层序遍历:A-B-C-D-E-F-G (先遍历根再遍历子树)

posted @ 2017-10-22 16:21  hooks  阅读(356)  评论(0编辑  收藏  举报