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;
}
}
分享到:
相关推荐
很好的数据结构编程代码,二叉树实验报告。是C++编程的源代码
二叉树遍历问题二叉树遍历问题二叉树遍历问题二叉树遍历问题二叉树遍历问题二叉树遍历问题二叉树遍历问题二叉树遍历问题二叉树遍历问题二叉树遍历问题二叉树遍历问题二叉树遍历问题二叉树遍历问题二叉树遍历问题...
二叉树问题 一、 需求分析: 1) 以二叉链表的方式创建二叉树 2) 分别先序、中序、后序遍历二叉树。 3) 输出各种遍历结果。 二、详细设计 1)设定创建二叉树函数: typedef struct BiTNode{ char data; struct ...
主要介绍了python先序遍历二叉树问题,简单分析了问题,然后向大家分享了代码示例,具有一定参考价值,需要的朋友可以了解下。
二叉树四则运算,简单的代码运行,熟练运用二叉树问题
关于数据结构实验的二叉树问题
二叉树遍历问题-二叉树遍历问题
二叉树遍历问题 二叉树遍历问题-前序, 中序, 后序二叉树遍历问题-前序, 中序, 后序二叉树遍历问题-前序, 中序, 后序二叉树遍历问题-前序, 中序, 后序二叉树遍历问题-前序, 中序, 后序二叉树遍历问题-前序...
二叉树二叉树二叉树二叉树二叉树二叉树二叉树二叉树二叉树二叉树二叉树二叉树二叉树二叉树二叉树二叉树二叉树二叉树二叉树二叉树二叉树二叉树二叉树二叉树二叉树
二叉树上色问题的实验报告,利用C++解决数据结构二叉树问题
二叉树排序二叉树排序二叉树排序二叉树排序二叉树排序二叉树排序二叉树排序
信息学奥林匹克分区联赛的基础知识 包括CPU运行原理 电脑基础知识,后面有有关二叉树的详细知识点 共233页
已知二叉树的前序和中序序列,构造此二叉树。
二叉树二叉树二叉树二叉树二叉树二叉树二叉树二叉树二叉树二叉树二叉树二叉树二叉树二叉树二叉树
(2)先序、中序、后序遍历二叉树:递归算法。 (3)中序遍历二叉树:非递归算法(最好也能实现先序,后序非递归算法)。 (4)求二叉树的高度 。 (5)求二叉树的叶子个数。 (6)对于树中每一个元素值为x的结点...
在二叉树类binarytree中增加一个功能,判断是否为完全二叉树(使用自定义的队列类完成)
编写算法判别给定二叉树是否为完全二叉树。