在使用栈来实现二叉树的中序遍历时,对于判断当前结点为空时使用 while 和 if 的结果不一样
//中序遍历 左根右
public String inOrder(){
ArrayList<E> list = new ArrayList<>(); inOrder(root,list); return list.toString(); } private void inOrder(Node root, ArrayList<E> list) {
LinkedList<Node> stack = new LinkedList<>(); Node mid = root; //标记遍历结点不为null 或者 栈不为空 while(mid != null || !stack.isEmpty()){
//这里使用 if 的话只会出现左子树的左节点 //用while 的话能如期显示 while (mid != null){
//把mid的左序列结点,全部压栈 stack.push(mid); mid = mid.left; } //出栈遍历 Node pop = stack.pop(); list.add(pop.value); //这里可以不用判断 //直接写 mid = pop.right; if (pop.right != null){
mid = pop.right; } } }
原因分析:
while和if一个是循环语句,一个是判断语句。
if 只做判断,判断一次之后,便不会再回来了
while 的话,循环,直到结果为false,才跳出来
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/217438.html原文链接:https://javaforall.net
