Java二叉树的遍历

二叉树

二叉树的是常见的数据结构,二叉树的遍历有三种,分别为前序遍历、中序遍历和后序遍历。下面看看使用Java实现二叉树。java

  1. 前序遍历:先遍历根节点,再遍历左子树,最后遍历右子树
  2. 中序遍历:再遍历左子,树先遍历根节点,最后遍历右子树
  3. 后序遍历:再遍历左子,最后遍历右子树,树先遍历根节点

如下图为例sql

前序遍历:ABDEGCFbash

中序遍历:DBGEACF数据结构

后序遍历:DGEBFCAide

二叉树的实现

JAVA实现须要创建三个类post

  1. TreeNode.java
  2. TreeCreator.java
  3. TreeTreavervsal.java

下面是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;
		
	
}
复制代码
相关文章
相关标签/搜索