二叉树的遍历(java版)
一,二叉树的遍历分为三种:
1.前序遍历:先输出父节点, 再遍历左子树和右子树。
2.中序遍历:先遍历左子树, 再输出父节点, 再遍历右子树。
3.后序遍历:先遍历左子树, 再遍历右子树, 最后输出父节点。
总结:通过看父节点的输出先后顺序既可以判断是什么遍历方式。
二,下面代码实现:
public class BinaryTree { public static void main(String[] args) { //创建一个二叉树对象 BinaryTree1 binaryTree = new BinaryTree1(); //创建结点对象 PlayerNode root = new PlayerNode(1, "梅西"); PlayerNode node2 = new PlayerNode(2, "内马尔"); PlayerNode node3 = new PlayerNode(3, "阿圭罗"); PlayerNode node4 = new PlayerNode(4, "范佩西"); PlayerNode node5 = new PlayerNode(5, "罗本"); //创建该二叉树 root.setLeft(node2); root.setRight(node3); node3.setRight(node4); node3.setLeft(node5); binaryTree.setRoot(root); System.out.println("前序遍历"); binaryTree.preOrder(); System.out.println("中序遍历"); binaryTree.infixOrder(); System.out.println("后序遍历"); binaryTree.postOrder(); } } //定义一个二叉树 class BinaryTree1{ private PlayerNode root; //根节点 public void setRoot(PlayerNode 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 PlayerNode{ private int no; private String name; private PlayerNode left; //默认为null private PlayerNode right; public PlayerNode(int no, String name){ this.no = no; this.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 PlayerNode getLeft() { return left; } public void setLeft(PlayerNode left) { this.left = left; } public PlayerNode getRight() { return right; } public void setRight(PlayerNode right) { this.right = right; } @Override public String toString() { return "PlayerNode{" + "no=" + no + ", name='" + name + '\'' + '}'; } //前序遍历 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); //输出父节点 } }