中序:书上有
前序:先把根节点r入栈,然后出栈并visit,然后把出栈的这个节点的左右子节点入栈,然后出栈设为p并visit,此时若p的右节点为null则不入栈,否则入栈,然后判断左节点,不为空则入栈。然后出栈,重复即可。其实是这样一个从根节点一直往下,同时把右节点入栈记住,当左边访问完,再把右节点退栈访问。的这么一个过程。
后序遍历:《优先左进到底,无左节点了再往右;接下来再重复。把这路径上所有节点入栈,直到无左节点也无右节点。》我们把《》内代码记为R。出栈一节点p,访问p,取得栈顶元素q(不是出栈pop),(此时判断节点p是上一个节点q的左节点还是右节点,如果是q的左节点,则接下来把q的右节点使用代码R。如果p是q的右节点,则出栈q且访问q。这段代码可以归为T。
深度优先一般用栈或者递归,广度优先用队列,先进先出。栈和队列其实都是工具,代我们辅助记住我们要用的东西,并保持一个使用顺序。都可以用数组实现。
二叉树的三个遍历都是深度优先,二叉树的广度优先其实是层序遍历