完全二叉树是指除了最后一层外,每一层都是完全填满的,最后一层可以是满的也可以是未满的二叉树。遍历完全二叉树的顺序有三种,分别是前序遍历、中序遍历和后序遍历。在理解完全二叉树遍历顺序之前,先了解下二叉树的定义,以及前、中、后序遍历的基本概念。
二叉树定义
二叉树是由n(n>=0)个结点组成的有限集合,它或者是空树,或者是由一个根节点和两棵互不相交的分别称为根节点的左子树和右子树的二叉树组成。二叉树的每个结点最多只有两棵子树,并且左子树和右子树是有序的,其次序不能任意交换。
前序遍历
前序遍历是指先访问根节点,然后遍历左子树,最后遍历右子树。其遍历的顺序为:根节点->左子树->右子树。
中序遍历
中序遍历是指先遍历左子树,然后访问根节点,最后遍历右子树。其遍历顺序为:左子树->根节点->右子树。
后序遍历
后序遍历是指先遍历左子树,然后遍历右子树,最后访问根节点。其遍历顺序为:左子树->右子树->根节点。
完全二叉树的特点
完全二叉树的特点是除了最后一层外,每一层都填满节点, 且所有节点靠左对齐。最后一层上,如果有叶子结点,则它们都靠左排列。完全二叉树可用数组实现。例如,一个结点的下标为i,则它的左孩子结点下标为2i,右孩子结点下标为2i+1,其父节点下标为i/2。
完全二叉树的遍历顺序
完全二叉树的遍历顺序有三种,前序遍历、中序遍历和后序遍历。
前序遍历完全二叉树
对于完全二叉树,采用前序遍历(根节点->左子树->右子树)的方式遍历其节点。具体做法是从根节点开始,按照从上到下、从左到右的顺序遍历二叉树的结点。即先访问根节点,然后递归访问左子树和右子树。在遍历过程中,假设节点总数为n,那么遍历的时间复杂度为O(n),空间复杂度为O(logn),因为递归调用栈的最大深度为logn。
中序遍历完全二叉树
完全二叉树采用中序遍历(左子树->根节点->右子树)的方式遍历,遍历顺序同样是从上到下、从左到右的顺序遍历二叉树的结点。具体做法是:先遍历左子树,然后访问根节点,最后遍历右子树。在遍历过程中,同样还是先递归访问左子树,然后访问根节点,最后递归遍历右子树。中序遍历的时间复杂度同样是O(n),空间复杂度也是O(logn)。
后序遍历完全二叉树
完全二叉树的后序遍历(左子树->右子树->根节点)方式同样也是从上到下、从左到右的顺序遍历二叉树的结点。具体做法是:先遍历左子树,然后递归遍历右子树,最后访问根节点。在遍历过程中,同样还是先递归遍历左子树,然后递归遍历右子树,最后访问根节点。后序遍历的时间复杂度依然是O(n),空间复杂度仍然是O(logn)。
微信扫一扫,领取最新备考资料