二叉搜索树前序遍历的实现-栈与递归
用栈实现前序遍历
首先明确一点:先序遍历的顺序为:根节点 左子树 右子树
大家都知道,栈的输出是先进后出
所以想按照根->左->右这样的顺序去输出,必须在栈底层先存储右子树,然后再存储左子树
关于根节点,有一个总根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);
}

浙公网安备 33010602011771号