二叉树的遍历:
递归就不用说了,3行代码就解决了
面试的时候遇到这个,想不起来了,现在总结一下。
参考博客:https://blog.csdn.net/u012102306/article/details/52841163
https://www.cnblogs.com/SHERO-Vae/p/5800363.html
先序遍历:
根左右。当前节点p放入栈中,判断P是否有左孩子,如果没有,则从栈中取出这个节点,并且将p的右孩子当做当前节点。如果有左孩子,则p的左孩子为当前节点。知道p为空并且栈为空,遍历结束。
p遍历树的时候直接输出再入栈
/**
* 二叉树的先序遍历
* 遍历的时候输出
* 根左右
* 1245367
*/
public static void preOder(Tree tree){
Tree p = tree;
Stack<Tree> s = new Stack<Tree>();
while(p != null || s.isEmpty()==false){
// 如果有左子树,入栈
while(p != null){
System.out.print(p.val);
s.push(p);
p = p.l