import java.util.LinkedList;
public class TreeSearch {
//https://blog.csdn.net/xiaojin21cen/article/details/96971188
//创建一个二叉树
public TreeNode getTargetTree(){
//叶子节点
TreeNode G=new TreeNode("G");
TreeNode D=new TreeNode("D");
TreeNode E=new TreeNode("E",G,null);
TreeNode B=new TreeNode("B",D,E);
TreeNode H=new TreeNode("H");
TreeNode I=new TreeNode("I");
TreeNode F=new TreeNode("F",H,I);
TreeNode C=new TreeNode("C",null,F);
//构造根节点
TreeNode root=new TreeNode("A",B,C);
return root;
}
/**
*前序遍历(先根接点-》左子树-》右子树)【ABDEGCFHI】
* @param treeNode
*/
public void preOrderVisitTreeNode(TreeNode treeNode){
if (treeNode!=null){
System.out.printf(treeNode.getValue());
if (treeNode.getLeftTreeNode()!=null){
preOrderVisitTreeNode(treeNode.getLeftTreeNode());
}
if (treeNode.getRightTreeNode()!=null){
preOrderVisitTreeNode(treeNode.getRightTreeNode());
}
}
}
/**
* 中序遍历(先左子树-》根节点-》右子树)[DBGEACHFI]
* @param node
*/
public void inOrderVisitTreeNode(TreeNode node){
if (node!=null){
if (node.leftChildren!=null){
inOrderVisitTreeNode(node.leftChildren);
}
System.out.print(node.getValue());
if (node.rightChildren!=null){
inOrderVisitTreeNode(node.rightChildren);
}
}
}
/**
* 后续遍历(先左子树-》右子树-》根节点) [DGEBHIFCA]
* @param
*/
public void postOrderVisitTreeNode(TreeNode node){
if (node!=null){
if (node.leftChildren!=null){
postOrderVisitTreeNode(node.leftChildren);
}
if (node.rightChildren!=null){
postOrderVisitTreeNode(node.rightChildren);
}
System.out.print(node.getValue());
}
}
/**
* 层次遍历 (第1层、第2层、第3层...)[ABCDEFGHI]
*/
public void levelOrderVisitTreeNode(TreeNode node){
if (node!=null){
LinkedList<TreeNode> list=new LinkedList<TreeNode>();
list.add(node);
TreeNode currentTreeNode;
while (!list.isEmpty()){
currentTreeNode=list.poll();//弹出并赋值
if (currentTreeNode!=null){
System.out.print(currentTreeNode.getValue());
if (currentTreeNode.getLeftTreeNode()!=null){
list.add(currentTreeNode.getLeftTreeNode());
}
if (currentTreeNode.getRightTreeNode()!=null){
list.add(currentTreeNode.getRightTreeNode());
}
}
}
}
}
public static void main(String[] args) {
TreeSearch treeSearch=new TreeSearch();
TreeNode tree=treeSearch.getTargetTree();
System.out.println("前序遍历:");
treeSearch.preOrderVisitTreeNode(tree);
System.out.println("\n中序遍历:");
treeSearch.inOrderVisitTreeNode(tree);
System.out.println("\n后序遍历:");
treeSearch.postOrderVisitTreeNode(tree);
System.out.println("\n层次遍历:");
treeSearch.levelOrderVisitTreeNode(tree);
}
static class TreeNode{
private String value=null;
private TreeNode leftChildren=null;
private TreeNode rightChildren=null;
public TreeNode(){
}
public TreeNode(String value){
this.value=value;
}
public TreeNode(String value,TreeNode leftChildren,TreeNode rightChildren){
this.value=value;
this.leftChildren=leftChildren;
this.rightChildren=rightChildren;
}
public void setLeftTreeNode(TreeNode leftChildren) {
this.leftChildren = leftChildren;
}
public void setRightTreeNode(TreeNode rightChildren) {
this.rightChildren = rightChildren;
}
public void setValue(String value) {
this.value = value;
}
public String getValue() {
return value;
}
public TreeNode getLeftTreeNode() {
return leftChildren;
}
public TreeNode getRightTreeNode() {
return rightChildren;
}
}
}
数据结构 —— 二叉树的4种遍历,java代码实现
于 2021-01-08 16:52:05 首次发布