数据结构中无意识中抵触树结构,觉得没逻辑,哪儿有树长成那熊样的,但讨厌归讨厌,还得看看。
首先是一些基本概念:
1、度:结点拥有的子树数称为结点的度,就是当前结点下面有几个结点。度为0的结点称为叶结点或是终端结点
2、层次:从跟开始定义其,根为第一层,根的孩子为第二层。树中结点的最大层次称为数的深度或是高度
3、二叉树:是n(n>=0)个结点的有限集合,该集合或者为空集,或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。
4、满二叉树:如果所有分支结点都存在左子树和右子树,并且所有叶子都在同一层上的树。
5、完全二叉树:对一颗具有n个结点的二叉树按层序变好,如果变好为i(=1<i <=n)的结点与同样深度的满二叉树中变好为i的结点在二叉树中位置完全相同的树。
二叉树遍历
1、前序遍历(DLR),首先访问根结点,然后遍历左子树,最后遍历右子树。简记根-左-右。如下图的遍历顺序为:ABDGHCEIF
2、中序遍历(LDR),首先遍历左子树,然后访问根结点,最后遍历右子树。简记左-根-右。如下图的遍历顺序为:GDHBAEICF
3、后序遍历(LRD),首先遍历左子树,然后遍历右子树,最后访问根结点。简记左-右-根。如下图的遍历顺序为:GHDBIEFCA
4、层序遍历,从根结点开始,从上而下逐层遍历,同层中从左到有遍历。如下图的遍历顺序为:ABCDEFGHI
推到遍历结果
已知一棵二叉树的前序遍历序列为ABCDEF,中序遍历为CBAEDF,问这棵二叉树的后序遍历结果是什么?
分析:前序遍历中A为第一个,说明A是根结点,再由中序遍历中 CB A EDF知,CB是左子树,EDF是右子树;
对于CB,前序遍历中先B后C,则B是A的左子树,C是B的子树,再根据中序中为CBA知C是B的左孩子;
对于EDFF,根据前序遍历知D为A的右孩子,根据中序遍历遍历为EDF知E是D的左孩子,F是D的右孩子: