数据结构 ——二叉树的前,中,后,遍历方式
一 . 前序遍历
首先,我们要知道二叉树的前序遍历的规则是根,左,右,知道这个就可以实现下列的代码
/********** Begin *********/
//递归
// if(root == null) return;
// System.out.println(root.item);
// preOrder(root.leftChild);
// preOrder(root.rightChild);
//迭代
TreeNode p;
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while(!stack.isEmpty()){
p = stack.pop();
System.out.println(p.item);
if(p.rightChild != null){
stack.push(p.rightChild);
}
if(p.leftChild != null){
stack.push(p.leftChild);
}
}
/********** End *********/
}
注意在使用上述代码时,要注意自己使用的TreeNode类的结构,下面的代码类似。
二. 中序遍历
中序遍历的方式是左,根,右,下面是代码的实现
public void inOrder(TreeNode root) {
/********** Begin *********/
//递归法
// if(root == null) return ;
// inOrder(root.leftChild);
// System.out.println(root.item);
// inOrder(root.rightChild);
//迭代法
Stack<TreeNode> stack = new Stack<>();
TreeNode p = root;
while(p != null || !stack.isEmpty()){
while(p != null){
stack.push(p);
p = p.leftChild;
}
p = stack.pop();
System.out.println(p.item);
p = p.rightChild;
}
/********** End *********/
}
三. 后序遍历
后序遍历的方式是左,右,根,下面是代码实现
public void postOrder(TreeNode root) {
/********** Begin *********/
//递归法
if(root == null) return ;
postOrder(root.leftChild);
postOrder(root.rightChild);
System.out.println(root.item);
//迭代法
// Stack<TreeNode> stack = new Stack<>();
// List<Integer> result = new ArrayList<>();
// TreeNode p ;
// stack.push(root);
// while(!stack.isEmpty()){
//
// p = stack.pop();
// result.add(p.item);
// if(p.leftChild != null){
// stack.push(p.leftChild);
// }
// if(p.rightChild != null){
// stack.push(p.rightChild);
// }
// }
// Collections.reverse(result);
// for(int num : result){
// System.out.println(num);
// }
/********** End *********/
}
四. 总结
通过上面三种遍历方式,发现递归的代码是比较容易实现的,但是我们也应该掌握这种简单的通过迭代实现的方式,所以希望大家能够熟练掌握这6种方式。本片文章也是本人在学习完这三种遍历方式后,写的,主要就是来加深一下自己的印象。