理论:
1.先(根)序遍历的递归定义:
若二叉树非空,则依次执行如下操作:
⑴ 访问根结点;
⑵ 遍历左子树;
⑶ 遍历右子树。
2.中(根)序遍历的递归算法定义:
若二叉树非空,则依次执行如下操作:
⑴遍历左子树;
⑵访问根结点;
⑶遍历右子树。
3.后(根)序遍历得递归算法定义:
若二叉树非空,则依次执行如下操作:
⑴遍历左子树;
⑵遍历右子树;
⑶访问根结点
java实现
package 二叉树; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Stack; public class BSTree { private List<Node>nodeList=new ArrayList<Node>(); public Node CreateTree(int[] a){ for(int data:a) nodeList.add(new Node(data)); int lastLeftRoot=a.length/2-1; for(int i=lastLeftRoot; i>=0; i--) { Node root=nodeList.get(i); int leftIndex=i*2+1; int rightIndex=leftIndex+1; if(leftIndex<a.length); { Node left=nodeList.get(leftIndex); root.setLeft(left); } if(rightIndex<a.length) { Node right=nodeList.get(rightIndex); root.setRgiht(right); } } Node root=nodeList.get(0); return root; } public static void printNode(Node node){ System.out.print(node.getData()+" "); } public static void preOrderStack(Node node){ Stack<Node> stack=new Stack<Node>(); Node p=node; if(node!=null) { stack.push(p); while(!stack.isEmpty()) { Node top=stack.pop(); printNode(top); if(top.getRight()!=null) stack.push(top.getRight()); if(top.getLeft()!=null) stack.push(top.getLeft()); } } } public static void minOrderStack(Node node){ Stack<Node> stack=new Stack<Node>(); Node p=node; while(p!=null ||!stack.isEmpty()) { while(p!=null) { stack.push(p); p=p.getLeft(); } if(!stack.isEmpty()) { p=stack.pop(); printNode(p); p=p.getRight(); } } } public static void postOrderStack(Node node){ Stack<Node> stack=new Stack<Node>(); Node p=node; Node q=p; while(p!=null) { while(p.getLeft()!=null) { stack.push(p); p=p.getLeft(); } while(p!=null&&(p.getRight()==null||p.getRight()==q)) { printNode(p); q=p; if(stack.isEmpty())return; p=stack.pop(); } stack.push(p); p=p.getRight(); } } public static void preTrav(Node node){ if(node==null) return; System.out.print(node.getData()+" "); preTrav(node.getLeft()); preTrav(node.getRight()); } public static void midTrav(Node node){ if(node==null) return; midTrav(node.getLeft()); System.out.print(node.getData()+" "); midTrav(node.getRight()); } public static void postTrav(Node node){ if(node==null) return; postTrav(node.getLeft()); postTrav(node.getRight()); System.out.print(node.getData()+" "); } public static void main(String[] args) { // TODO Auto-generated method stub int[] a={10,6,14,4,8,12,16};//这些数据是按二叉查找树的层次遍历存放 BSTree bt=new BSTree(); Node root=bt.CreateTree(a); preTrav(root); System.out.println(); preOrderStack(root); System.out.println(); midTrav(root); System.out.println(); minOrderStack(root); System.out.println(); postTrav(root); System.out.println(); postOrderStack(root); System.out.println(); } }
时间: 2024-12-16 09:11:07