本节主要研究二叉树中二叉链表的先序遍历原理。基础理论知识有二叉链表的构造原理余递归的思想。
根据递归的思想,我们首先应当建立二叉链表的结点类,包括成员变量data域,指向左右子树的指针,并对链表节点类的构造函数进行重载。其次,我们应当建立二叉链表类,包括成员变量指向根节点的头指针,代表二叉树属性的一些参数,和诸多类内函数。由于本节讲述的是先序遍历方法,因此类内函数应当由先序遍历方法函数。又如,本案例涉及对结点数据域数值的打印输出,因此应当另写函数对数据域的值进行打印操作。
二叉链表建立好后,可以通过调用类内先序遍历函数进行先序遍历的开始。随着遍历进行,函数会不挺访问和自己类一样的二叉链表,不断调用自己,实现了递归。
先序遍历的函数的构思:
1. 判断指针指向的结点是否为空,若为空,返回上一级;
2. 不是空,打印输出该节点的数据域数值
3. 将指针更新为指向该结点的左子树的指针
4. 将指针更新为指向该结点的右子树的指针
重点:我第一次想不明白,将指针更新为指向左子树指针后,会发生什么。其实,更新指针后,依然会进行1,2,3,4四个操作,直到指针为NULL或者子函数体执行完毕。它永远会返回到上一级调用函数内部。因此,二叉链表的遍历是“跳来跳去”的
接下来的中序遍历和后序遍历,和先序遍历的函数非常相似。只不过是cout语句的位置不同。除此之外,对于一棵树,三种访问方法的访问总路线很相似,只不过是各个结点的访问时机不同。对于每一个结点,均要路过三次,第一次路过即打印:先序,第二次路过打印:中序,否则:后序
时间复杂度