`
lianggl2008
  • 浏览: 25585 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

二叉树问题

阅读更多
package com.strongit;

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

/**
 *           H
 *          / 
 *         D   
 *        / \ 
 *       B   G
 *      / \ /
 *     A  C F
 *         /
 *        E 
 *         
 * @author Administrator
 *
 */
public class ErChaShu {
	
	private char[] data = {'H','D','G','B','C','F','A','E'};
	
	private TreeNode root;
	
	public TreeNode getRoot() {
		return root;
	}

	public void setRoot(TreeNode root) {
		this.root = root;
	}

	public ErChaShu() {
		root = create();
		System.out.print("前序遍历: ");
		preOrder(root);
		System.out.print("\n中序遍历: ");
		inOrder(root);
		System.out.print("\n后序遍历: ");
		postOrder(root);
		System.out.print("\n层序遍历: ");
		layOrder(root);
	}
	
	public TreeNode create() {
		TreeNode r = new TreeNode(data[0]);
		for(int i=1; i<data.length;i++) {
			TreeNode node = new TreeNode(data[i]);
			insert(r,node);
		}
		return r;
	}
	
	public void insert(TreeNode b,TreeNode s) {
		if(s.getValue() < b.getValue()) {
			if(b.getLeft() == null) {
				b.setLeft(s);
			} else {
				insert(b.getLeft(),s);
			}
		} else if(s.getValue() > b.getValue()) {
			if(b.getRight() == null) {
				b.setRight(s);
			} else {
				insert(b.getRight(),s);
			}
		}
	}
	
	public void visit(TreeNode p) {
		System.out.print(p.getValue()+" , ");
	}
	
	//前序遍历
	public void preOrder(TreeNode p) {
		if(p != null) {
			visit(p);
			preOrder(p.getLeft());
			preOrder(p.getRight());
		}
	}
	
	//中序遍历
	public void inOrder(TreeNode p) {
		if(p != null) {
			inOrder(p.getLeft());
			visit(p);
			inOrder(p.getRight());
		}
	}
	
	//后序遍历
	public void postOrder(TreeNode p) {
		if(p != null) {
			postOrder(p.getLeft());
			postOrder(p.getRight());
			visit(p);
		}
	}
	
	//层序遍历
	public void layOrder(TreeNode p) {
		Queue<TreeNode> queue = new LinkedList<TreeNode>();
		System.out.print(p.getValue()+" , ");
		if(p.getLeft() != null)
			queue.offer(p.getLeft());
		if(p.getRight() != null)
			queue.offer(p.getRight());
		while(queue.size() > 0) {
			TreeNode node = queue.poll();
			System.out.print(node.getValue()+" , ");
			if(node.getLeft() != null)
				queue.offer(node.getLeft());
			if(node.getRight() != null)
				queue.offer(node.getRight());
		}
	}
	
	public void print(TreeNode p) {
		if(p.getLeft() != null) {
			System.out.println("   "+p.getValue());
		}
		
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new ErChaShu();
	}

}

class TreeNode {
	private char value;
	private TreeNode left;
	private TreeNode right;
	
	public TreeNode() {
		
	}
	
	public TreeNode(char value) {
		this(value,null,null);
	}
	
	public TreeNode(char value,TreeNode left,TreeNode right) {
		this.value = value;
		this.left = left;
		this.right = right;
	}
	
	public TreeNode getLeft() {
		return left;
	}
	public void setLeft(TreeNode left) {
		this.left = left;
	}
	public TreeNode getRight() {
		return right;
	}
	public void setRight(TreeNode right) {
		this.right = right;
	}
	public char getValue() {
		return value;
	}
	public void setValue(char value) {
		this.value = value;
	}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics