您的位置:首页 > 其它

二叉树的建立与前、中、后、层次遍历

2011-09-19 17:06 267 查看
/*
2011-9-19
author:BearFly1990
*/
package algorithm;

import java.util.LinkedList;
import java.util.Queue;

public class BinaryTreeTraverse {
public static void main(String[] args) {
String tree = "1234567";
Node head = createBiTree(tree);

preOrderTraverse(head);
System.out.println();
inOrderTraverse(head);
System.out.println();
postOrderTraverse(head);
System.out.println();
LayerOrderTraverse(head);
System.out.println();
}
private static Node createBiTree(String str){
Queue<Node> parents = new LinkedList<Node>();
Queue<Node> children = new LinkedList<Node>();
for(int i = 0; i < str.length(); i++){
children.add(new Node(new Integer(str.charAt(i)-'0')));
}
Node parent = children.poll();
parents.add(parent);
while(!parents.isEmpty() && !children.isEmpty()){
Node tparent = parents.poll();
Node tleft = children.poll();
Node tright = children.poll();
tparent.setLeftChild(tleft);
tparent.setRightChild(tright);
parents.add(tleft);
parents.add(tright);
}
return parent;
}
private static void LayerOrderTraverse(Node node) {
Queue<Node> q = new LinkedList<Node>();
q.add(node);
while(!q.isEmpty()){
Node temp = q.poll();
System.out.printf("%d ", temp.value);
Node leftChild = temp.getLeftChild();
Node rightChild = temp.getRightChild();
if(leftChild != null)q.add(leftChild);
if(rightChild != null)q.add(rightChild);
}
}
private static void postOrderTraverse(Node node) {
if( node == null)return;
postOrderTraverse(node.getLeftChild());
postOrderTraverse(node.getRightChild());
System.out.printf("%d ",node.getValue());
}
private static void inOrderTraverse(Node node) {
if(node == null){
return;
}
inOrderTraverse(node.getLeftChild());
System.out.printf("%d ",node.getValue());
inOrderTraverse(node.getRightChild());
}
private static void preOrderTraverse(Node node) {
if(node == null){
return;
}
System.out.printf("%d ",node.getValue());
preOrderTraverse(node.getLeftChild());
preOrderTraverse(node.getRightChild());
}
private static class Node{
private Integer value;
private Node leftChild;
private Node rightChild;
public Node(Integer value) {
this.value = value;
}
public Integer getValue() {
return value;
}
public void setValue(Integer value) {
this.value = value;
}
public Node getLeftChild() {
return leftChild;
}
public void setLeftChild(Node leftChild) {
this.leftChild = leftChild;
}
public Node getRightChild() {
return rightChild;
}
public void setRightChild(Node rightChild) {
this.rightChild = rightChild;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐