二叉搜索树前序遍历的实现-栈与递归

用栈实现前序遍历

首先明确一点:先序遍历的顺序为:根节点 左子树 右子树

大家都知道,栈的输出是先进后出
所以想按照根->左->右这样的顺序去输出,必须在栈底层先存储右子树,然后再存储左子树
关于根节点,有一个总根root,总根先入栈先输出,总根入栈后其右子树根节点与左子树根节点依次入栈
输出的时候,就能按照根->左->右顺序输出

public MyListArray<T> preOrder(){
    	//存储遍历元素
        MyListArray<T> list = new MyListArray<>();
        //栈遍历存节点类型
        MyStackLinked<NodeMyBST2> stack = new MyStackLinked<>();
        //根节点先入栈
        stack.push(root);
    
        NodeMyBST2 mid = root;
    
        while (!stack.isEmpty()){
            NodeMyBST2 pop = stack.pop();
            list.add(pop.value);

            //把出栈元素的右子树入栈
            if (pop.right!=null) stack.push(pop.right);
            //把出栈元素的左子树入栈
            if (pop.left != null) stack.push(pop.left);
        }
        return list;
    }

用递归实现前序遍历

public MyListArray<T> preOrder2() {
        MyListArray<T> list = new MyListArray<>();
        preOrder2(root, list);//把list和跟节点去做递归遍历
        return list;
    }
前序遍历是先遍历  根节点 左子树 右子树
    private void preOrder2(NodeMyBST2 root, MyListArray<T> list) {
        if (root == null)return;
        //先输出根节点
        list.add(root.value);
        //然后输出左节点
        preOrder2(root.left,list);
        //然后输出右节点
        preOrder2(root.right,list);

    }
posted @ 2021-04-05 22:06  花间一壶酒Zz  阅读(235)  评论(0)    收藏  举报