一、先/中/后序遍历(递归)
递归方式会导致每个节点会经过三次,先序是在第一次经过节点时访问,中序是第二次经过节点时访问,后序是第三次经过节点时访问。
其中较为特殊的是叶子节点,左孩子和右孩子都为空,访问空树时什么都不做就返回。
public static void p(Node h) {
if(h == null) return;
else {
System.out.print(h.val);
//遍历左子树
p(h.left);
//遍历右子树
p(h.right);
}
}
二、先/中/后序遍历(非递归)
(1)利用栈来进行实现,三种算法在理解的基础上进行记忆,作为一种模板,以后遇到具体问题,可以稍加改变,但是大致流程需要记住。
(2)看待二叉树的两种角度(递归与非递归)区别:
1、先序遍历
先将根节点压入栈中,方便之后进行追踪
一些规则:
1)弹出就打印
2)如有右孩子,压入右
3)如有左孩子,压入左
4)都没有则什么都不干
public static void p(Node head) {
if(head != null) {
//准备一个栈
Stack<Node> stack = new Stack<>();
//压入根节点
stack.add(head);
while(!stack.isEmpty()) {
//栈不为空
Node node = stack.pop();//弹出节点
//访问节点(弹出就打印)
System.out