1,二叉树相关定义
路径(path):如果一棵树的一串结点n1,n2,...,nk满足前一个结点是后一个节点的父结点,则称这一串结点为从n1到nk的路径,这条路径的长度是k-1;
路径长度(length):一条路径上的结点数-1;
结点的深度(depth):从根节点到节点M的路径长度,根结点深度为0;
节点的层数(level):数值上与深度相等,根结点的层数为0;
树的高度(height):最深结点的深度+1;
叶结点(leaf):没有非空子树的结点;
分支节点、内部结点(internal node):至少有一个非空子树的结点;
满二叉树(full binary tree):每个结点要么是叶结点,要么是有两个非空子节点的内部结点。即,不存在只有一个子节点的内部结点。
完全二叉树(complete binary tree):除了最下面一层,每一层都被填满,且最下面一层也必须是从左到右填充。
图中,a为满二叉树,b为完全二叉树。
2,二叉树相关定理
定理1,满二叉树定理:
非空满二叉树的叶结点数等于其分支结点数加1.
定理2,:
一棵非空二叉树空子树的数目等于其结点数加1
3,遍历二叉树相关概念
前序遍历(preorder traversal):先访问节点,后访问子结点(其实还有先访问左子树,后访问右子树),上图二叉树前序遍历结果为:ABDCEGFHI
简记:中左右
后序遍历(postorder traversal):先访问子结点(包括他们的子树),然后再访问他们的结点(同样还是要求先左子树,后右子树)。DBGEHIFCA
注意:对于后序遍历,要想访问一个结点,必须先访问它的左右子结点,等它的左右子树都访问完了,才能访问该结点。
简记:左右中
中序遍历(inorder traversal):先访问左子结点(包括整个子树),然后访问该结点,最后访问右子结点(包括整个子树)。BDAGECHFI
逻辑:要想访问A,必须先访问B,要想访问B,必须先访问B的左子结点,为空,所以可以直接访问B,然后访问B的右子结点D,此时A的左子树完成访问,可以访问A了,接下来访问A的右子树,要想访问C必须先访问C的左子结点E,要想访问E必须先访问G,所以顺序是GEC,同样,要想访问F必须先访问H,F访问忘了之后才可以访问I,所以顺序是HFI
简记:左中右