
package com.atguigu.tree;import com.sun.media.sound.SoftTuning;/*** @author victor* @site https://victorfengming.gitee.io/* @project data_algorithm* @package com.atguigu.tree* @created 2021-02-24 21:40*/public class BinaryTreeDemo {public static void main(String[] args) {}}// 定义一个 BinaryTreeclass BinaryTree {private HeroNode root;public void setRoot(HeroNode root) {this.root = root;}// 真正的遍历操作// 前序遍历public void preOrder() {if (this.root != null) {this.root.preOrder();} else {System.out.println("当前二叉树为空,无法遍历!");}}// 中序遍历public void infixOrder() {if (this.root != null) {this.root.infixOrder();} else {System.out.println("二叉树为空,无法遍历");}}// 后续遍历public void postOrder() {if (this.root != null) {this.root.postOrder();} else {System.out.println("二叉树为空,无法遍历");}}}// 先创建 HeroNode 结点class HeroNode {private int no;private String name;private HeroNode left; // 默认为空private HeroNode right; // 默认为空public HeroNode(int no, String name) {this.no = no;this.name = name;}@Overridepublic String toString() {return "HeroNode{" +"no=" + no +", name='" + name + '\'' +'}';}public int getNo() {return no;}public void setNo(int no) {this.no = no;}public String getName() {return name;}public void setName(String name) {this.name = name;}public HeroNode getLeft() {return left;}public void setLeft(HeroNode left) {this.left = left;}public HeroNode getRight() {return right;}public void setRight(HeroNode right) {this.right = right;}// 编写前序遍历的方法public void preOrder() {//System.out.println(this);// 先输出父节点// 递归向左子树前序比遍历if (this.left != null) {// 左边递归this.left.preOrder();}// 递归向右子树前序遍历if (this.right != null) {this.right.preOrder();}}// 中序遍历public void infixOrder() {// 递归向左子树中序遍历if (this.left != null) {this.left.infixOrder();}// 输出父节点System.out.println(this);// 递归向右子树遍历if (this.right != null) {this.right.infixOrder();}}// 后续遍历public void postOrder() {if (this.left != null) {this.left.postOrder();}if (this.right != null) {this.right.postOrder();}System.out.println(this);}}// 结点的方法
public static void main(String[] args) {// 先需要创建一颗二叉树BinaryTree binaryTree = new BinaryTree();// 创建需要的节点HeroNode root = new HeroNode(1, "松江");HeroNode node2 = new HeroNode(2, "吴用");HeroNode node3 = new HeroNode(3, "卢俊义");HeroNode node4 = new HeroNode(4, "林冲");// 说明: 这里我们先手动创建的二叉树// ,后面我们学习递归的方式创建二叉树root.setLeft(node2);root.setRight(node3);node3.setRight(node4);binaryTree.setRoot(root);// 目前就挂载好了,二叉树的关系// 测试System.out.println("前序遍历");//1,2,3,4binaryTree.preOrder();}
前序遍历HeroNode{no=1, name='松江'}HeroNode{no=2, name='吴用'}HeroNode{no=3, name='卢俊义'}HeroNode{no=4, name='林冲'}Process finished with exit code 0
后面两个
System.out.println("前序遍历");//1,2,3,4binaryTree.preOrder();System.out.println("中序遍历");//2,1,3,4binaryTree.infixOrder();System.out.println("后序遍历");//2431binaryTree.postOrder();
前序遍历HeroNode{no=1, name='松江'}HeroNode{no=2, name='吴用'}HeroNode{no=3, name='卢俊义'}HeroNode{no=4, name='林冲'}中序遍历HeroNode{no=2, name='吴用'}HeroNode{no=1, name='松江'}HeroNode{no=3, name='卢俊义'}HeroNode{no=4, name='林冲'}后序遍历HeroNode{no=2, name='吴用'}HeroNode{no=4, name='林冲'}HeroNode{no=3, name='卢俊义'}HeroNode{no=1, name='松江'}Process finished with exit code 0
然后我现在要看看你是不是真的会了
我再增加一个节点关胜
public static void main(String[] args) {// 先需要创建一颗二叉树BinaryTree binaryTree = new BinaryTree();// 创建需要的节点HeroNode root = new HeroNode(1, "松江");HeroNode node2 = new HeroNode(2, "吴用");HeroNode node3 = new HeroNode(3, "卢俊义");HeroNode node4 = new HeroNode(4, "林冲");HeroNode node5 = new HeroNode(5, "关胜");// 说明: 这里我们先手动创建的二叉树// ,后面我们学习递归的方式创建二叉树root.setLeft(node2);root.setRight(node3);node3.setRight(node4);node3.setLeft(node5);binaryTree.setRoot(root);// 目前就挂载好了,二叉树的关系// 测试System.out.println("前序遍历");//1,2,3,5,4binaryTree.preOrder();System.out.println("中序遍历");//2,1,5.3.4binaryTree.infixOrder();System.out.println("后序遍历");//2,5,4,3,1binaryTree.postOrder();}

前序遍历HeroNode{no=1, name='松江'}HeroNode{no=2, name='吴用'}HeroNode{no=3, name='卢俊义'}HeroNode{no=5, name='关胜'}HeroNode{no=4, name='林冲'}中序遍历HeroNode{no=2, name='吴用'}HeroNode{no=1, name='松江'}HeroNode{no=5, name='关胜'}HeroNode{no=3, name='卢俊义'}HeroNode{no=4, name='林冲'}后序遍历HeroNode{no=2, name='吴用'}HeroNode{no=5, name='关胜'}HeroNode{no=4, name='林冲'}HeroNode{no=3, name='卢俊义'}HeroNode{no=1, name='松江'}Process finished with exit code 0
