二叉树遍历(java)

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;
	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值