Java二叉树的遍历
二叉树遍历分为:前序遍历,中序遍历,后序遍历;
创建一个二叉树类;Tree
class Tree{
String val;
Tree left;
Tree right;
Tree(String str){
val = str;
}
}
生成一个二叉树:
public static Tree treeset(){
Tree root = new Tree("jack");
Tree a = new Tree("Tom");
Tree b = new Tree("Lucy");
Tree c = new Tree("LucyMom");
Tree d = new Tree("LucyDad");
Tree e = new Tree("TomMom");
Tree f = new Tree("TomMomDad");
Tree g = new Tree("LucyDadMom");
root.left=a;
root.right=b;
a.left=e;
e.right=f;
b.left=c;
b.right=d;
d.left=g;
return root;
}
前序递归遍历方法:
public static void qianxuDigui(Tree tree){
qianxu.add(tree.val);
if (tree.left != null){
qianxuDigui(tree.left);
}
if(tree.right != null){
qianxuDigui(tree.right);
}
}
中序递归遍历方法:
public static void zhongxuDigui(Tree tree){
if (tree.left != null){
zhongxuDigui(tree.left);
}
zhongxu.add(tree.val);
if(tree.right != null){
zhongxuDigui(tree.right);
}
}
后续递归遍历方法:
public static void houxuDigui(Tree tree){
if (tree.left != null){
houxuDigui(tree.left);
}
if(tree.right != null){
houxuDigui(tree.right);
}
houxu.add(tree.val);
}
打印:
public static void print(String str,Tree tree){
if(str.equals("前序遍历")){
qianxuDigui(tree);
System.out.print("前序遍历:");
for (String s : qianxu) {
System.out.print(s+" ");
}
System.out.println();
}else if(str.equals("中序遍历")){
zhongxuDigui(tree);
System.out.print("中序遍历:");
for (String s : zhongxu) {
System.out.print(s+" ");
}
System.out.println();
}else if (str.equals("后序遍历")){
houxuDigui(tree);
System.out.print("后序遍历:");
for (String s : houxu) {
System.out.print(s + " ");
}
System.out.println();
}
}
完整代码:
package BinaryTree;
import java.util.ArrayList;
import java.util.List;
public class BinaryTreeTest {
static ArrayList<String> qianxu = new ArrayList<>();
static ArrayList<String> zhongxu = new ArrayList<>();
static ArrayList<String> houxu = new ArrayList<>();
public static Tree treeset(){
Tree root = new Tree("jack");
Tree a = new Tree("Tom");
Tree b = new Tree("Lucy");
Tree c = new Tree("LucyMom");
Tree d = new Tree("LucyDad");
Tree e = new Tree("TomMom");
Tree f = new Tree("TomMomDad");
Tree g = new Tree("LucyDadMom");
root.left=a;
root.right=b;
a.left=e;
e.right=f;
b.left=c;
b.right=d;
d.left=g;
return root;
}
//前序遍历
public static void qianxuDigui(Tree tree){
qianxu.add(tree.val);
if (tree.left != null){
qianxuDigui(tree.left);
}
if(tree.right != null){
qianxuDigui(tree.right);
}
}
public static void zhongxuDigui(Tree tree){
if (tree.left != null){
zhongxuDigui(tree.left);
}
zhongxu.add(tree.val);
if(tree.right != null){
zhongxuDigui(tree.right);
}
}
public static void houxuDigui(Tree tree){
if (tree.left != null){
houxuDigui(tree.left);
}
if(tree.right != null){
houxuDigui(tree.right);
}
houxu.add(tree.val);
}
public static void print(String str,Tree tree){
if(str.equals("前序遍历")){
qianxuDigui(tree);
System.out.print("前序遍历:");
for (String s : qianxu) {
System.out.print(s+" ");
}
System.out.println();
}else if(str.equals("中序遍历")){
zhongxuDigui(tree);
System.out.print("中序遍历:");
for (String s : zhongxu) {
System.out.print(s+" ");
}
System.out.println();
}else if (str.equals("后序遍历")){
houxuDigui(tree);
System.out.print("后序遍历:");
for (String s : houxu) {
System.out.print(s + " ");
}
System.out.println();
}
}
public static void main(String[] args) {
Tree tree =treeset();
print("前序遍历",tree);
print("中序遍历",tree);
print("后序遍历",tree);
}
}
class Tree{
String val;
Tree left;
Tree right;
Tree(String str){
val = str;
}
}