您的位置:首页 > 编程语言 > Java开发

二叉树的遍历 Java版

2016-04-21 16:00 363 查看
下面给出二叉树的前序、后序、中序遍历的递归和非递归加上层序的非递归算法
/*前序遍历,递归*/
public void preorder(TreeNode root){
TreeNode node = root;
if(node!=null){
visit(node);
preorder(node.left);
preorder(node.right);
}
}
/*中序遍历,递归*/
public void inorder(TreeNode root){
TreeNode node = root;
if(node!=null){
inorder(node.left);
visit(node);
inorder(node.right);
}
}
/*后序遍历,递归*/
public void postorder(TreeNode root){
TreeNode node = root;
if(node!=null){
postorder(node.left);
postorder(node.right);
visit(node);
}
}
/*前序遍历非递归*/
public void preorderNonRecursion(TreeNode root){
if(root==null)
return ;
TreeNode node = root;
Stack<TreeNode> stack = new Stack<TreeNode>();
while(node!=null||!stack.isEmpty()){
while(node!=null){
visit(node);
stack.push(node);
node = node.left;
}
TreeNode tn = stack.pop();
node = tn.right;
}
}
/*中序遍历非递归*/
public void inorderNonRecursion(TreeNode root){
if(root==null)
return ;
TreeNode node = root;
Stack<TreeNode> stack = new Stack<TreeNode>();
while(node!=null||!stack.isEmpty()){
while(node!=null){
stack.push(node);
node = node.left;
}
TreeNode tn = stack.pop();
visit(tn);
node = tn.right;
}
}
/*后序遍历非递归*/
public void postorderNonRecursion(TreeNode root){
if(root==null)
return ;
TreeNode node = root;
Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode previst = null;//记录上一次访问的节点
while(node!=null||!stack.isEmpty()){
while(node!=null){
stack.push(node);
node = node.left;
}
TreeNode tn = stack.peek();
//如果该节点的右孩子为空,或者改节点的右孩子已经被访问过,那么访问该节点
if(tn.right==null||tn.right==previst){
visit(tn);
stack.pop();
previst = tn;
}else
node = tn.right;
}
}
/*层序遍历,非递归*/
public void cengNonRecursion(TreeNode root){
if(root==null)
return ;
TreeNode node = root;
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(node);
while(!queue.isEmpty()){
TreeNode tn = queue.poll();
visit(tn);
if(tn.left!=null)
queue.add(tn.left);
if(tn.right!=null)
queue.add(tn.right);
}

}
public void visit(TreeNode node){
System.out.print(node.val+" ");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: