二叉树算法之3-二叉树的遍历(递归、非递归)

方法一:递归遍历

public void print(Node node){
  if(node!=null){
    System.out.println(node.value);//先序遍历
    print(node.left);
    //System.out.println(node.value);//中序遍历
    print(node.right);
    //System.out.println(node.value);//后序遍历
  }
}

方法二:非递归遍历
算法思想:使用栈。

1、先序遍历
public void print(Node node){
    Stack stack=new Stack<Node<T>>();
    while(node!=null || !stack.isEmpty){
        while(node!=null){
            System.out.println(node.getValue);//先序遍历
            stack.push(node);
            node=node.left;
        }
     if(!stack.isEmpty()){
            node=stack.pop();
            System.out.println(node.value);
            node = node.right;
        }
    }
}

内层循环用来存储节点,外层循环将内层循环的存储不断地转至节点的右树中。总的思想就是先压栈,然后出栈的时候再依次压入弹出节点的右树中的左树,以此类推。

2、中序遍历
public void print(Node node){
    Stack stack=new Stack<Node<T>>();
    while(node!=null || !stack.isEmpty){
        while(node!=null){
            stack.push(node);
            node=node.left;
        }
        if(!stack.isEmpty()){
            node=stack.pop();
            System.out.println(node.value);
            node = node.right;
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容