二叉树遍历,三种方法

来源:互联网 发布:ant java jar 编辑:程序博客网 时间:2024/05/16 06:11

package acm.result.test1;

/**
 * @author BTiger
 *
 */
public class Main {

 /**
  * 二叉树遍历,三种方法
  *
  * @param args
  */
 public static void main(String[] args) {
  Tree tree = getTree();
  Node root = tree.getRoot();
  
  // 先根遍历
  System.out.println("先根遍历");
  rootFirst(root);
  System.out.println();
  
  // 中根遍历
  System.out.println("中根遍历");
  middleFirst(root);
  System.out.println();

  // 后根遍历
  System.out.println("后根遍历");
  rootLast(root);

 }

 /**
  * 先根遍历
  *
  * @param root
  */
 private static void rootFirst(Node root) {
  System.out.print(root.getData()+" ");// 打印根节点
  if (root.getLeftNode() != null) {// 打印左节点
   rootFirst(root.getLeftNode());
  }
  if (root.getRightNode() != null) {// 打印右节点
   rootFirst(root.getRightNode());
  }
 }


 /**
  * 中根遍历
  *
  * @param root
  */
 private static void middleFirst(Node root) {
  if (root.getLeftNode() != null) {// 打印左节点
   middleFirst(root.getLeftNode());
  }
  System.out.print(root.getData()+" ");// 打印根节点
  if (root.getRightNode() != null) {// 打印右节点
   middleFirst(root.getRightNode());
  }
 }

 /**
  * 后根遍历
  *
  * @param root
  */
 private static void rootLast(Node root) {
  if (root.getLeftNode() != null) {// 打印左节点
   rootLast(root.getLeftNode());
  }
  if (root.getRightNode() != null) {// 打印右节点
   rootLast(root.getRightNode());
  }
  System.out.print(root.getData()+" ");// 打印根节点
 }
 /**
  * 构造二叉树
  *
  * @return
  */
 private static Tree getTree() {
  Node root = new Node();
  Node b = new Node();
  Node c = new Node();
  Node d = new Node();
  Node e = new Node();
  Node f = new Node();
  Node g = new Node();
  Node h = new Node();
  root.setData("A");
  b.setData("B");
  c.setData("C");
  d.setData("D");
  e.setData("E");
  f.setData("f");
  g.setData("G");
  h.setData("H");
  root.setLeftNode(b);
  root.setRightNode(c);
  b.setLeftNode(d);
  d.setRightNode(g);
  c.setLeftNode(e);
  c.setRightNode(f);
  f.setLeftNode(h);
  Tree tree = new Tree();
  tree.setRoot(root);
  return tree;
 }
}

class Tree {
 public Node root = null;

 public Node getRoot() {
  return root;
 }

 public void setRoot(Node root) {
  this.root = root;
 }

 public boolean isEmpty() {
  return this.root == null;
 }
}

class Node {
 public String data;
 public Node leftNode = null, rightNode = null;

 public boolean isLeaf() {
  return this.leftNode == null && this.rightNode == null;
 }

 public String getData() {
  return data;
 }

 public void setData(String data) {
  this.data = data;
 }

 public Node getLeftNode() {
  return leftNode;
 }

 public void setLeftNode(Node leftNode) {
  this.leftNode = leftNode;
 }

 public Node getRightNode() {
  return rightNode;
 }

 public void setRightNode(Node rightNode) {
  this.rightNode = rightNode;
 }

}