二叉树的是常见的数据结构,二叉树的遍历有三种,分别为前序遍历、中序遍历和后序遍历。下面看看使用Java实现二叉树。java
如下图为例sql
前序遍历:ABDEGCFbash
中序遍历:DBGEACF数据结构
后序遍历:DGEBFCAide
JAVA实现须要创建三个类post
下面是Java代码ui
TreeNode.javathis
package Tree;
public class TreeNode {
private final char value;
private TreeNode left;
private TreeNode right;
public TreeNode(char value) {
this.value=value;
this.left=null;
this.right=null;
}
public char getValue() {
return value;
}
public TreeNode getLeft() {
return left;
}
public void setLefg(TreeNode left) {
this.left=left;
}
public TreeNode getRight() {
return right;
}
public void setRight(TreeNode right) {
this.right=right;
}
}
复制代码
2.TreeCreator.javaspa
package Tree;
public class TreeCreator {
public TreeNode creatorSampleTree() {
TreeNode root =new TreeNode('A');
root.setLefg(new TreeNode('B'));
root.getLeft().setLefg(new TreeNode('D'));
root.getLeft().setRight(new TreeNode('E'));
root.getLeft().getRight().setLefg(new TreeNode('G'));
root.setRight(new TreeNode('C'));
root.getRight().setRight(new TreeNode('F'));
return root;
}
}
复制代码
3.TreeTreavervsal.javacode
package Tree;
import javax.sql.rowset.spi.SyncProvider;
public class TreeTraversal {
public void preOrder(TreeNode root) {
if(root == null) {
return;
}
System.out.print(root.getValue());
preOrder(root.getLeft());
preOrder(root.getRight());
}
public void inOrder(TreeNode root) {
if(root == null) {
return;
}
inOrder(root.getLeft());
System.out.print(root.getValue());
inOrder(root.getRight());
}
public void postOrder(TreeNode root) {
if(root == null) {
return;
}
postOrder(root.getLeft());
postOrder(root.getRight());
System.out.print(root.getValue());
}
public static void main(String[] args) {
TreeCreator creator=new TreeCreator();
TreeTraversal treaversal =new TreeTraversal();
TreeNode sampleTree=creator.creatorSampleTree();
treaversal.preOrder(sampleTree);
System.out.println();
treaversal.inOrder(sampleTree);
System.out.println();
treaversal.postOrder(sampleTree);
}
}
复制代码
例如:
前序遍历:ABDEGCF
中序遍历:DBGEACF
基本思想:根据前序遍历的特色得出A为根节点,那么中心遍历的A也为根节点,那么根据中序遍历特色A左边的为A的左子树,即DBGE为左子树,CF为右子树数,以此递归,求出树,而后最终得出后续遍历。
Java代码
public TreeNode creatorTree(String preOrder,String inOrder) {
if(preOrder.equals("")) {
return null;
}
char rootValue=preOrder.charAt(0);
int rootIndex =inOrder.indexOf(rootValue);
TreeNode root=new TreeNode(rootValue);
root.setLefg(
creatorTree(
preOrder.substring(1, rootIndex+1),
inOrder.substring(0, rootIndex)));
root.setRight(creatorTree(
preOrder.substring(1+rootIndex),
inOrder.substring(1+rootIndex)
));
return root;
}
复制代码