#定义节点类
package com.drj.tree;
/**
*
- @ClassName: TreeNode
- @Description:TODO(代表树节点)
- @author: drj
- @date: 2018年8月22日 下午9:32:13
- @Copyright: 2018
*/
public class TreeNode {
private TreeNode leftTreeNode;
private TreeNode rightTreeNode;
private String value;public TreeNode getLeftTreeNode() { return leftTreeNode; } public void setLeftTreeNode(TreeNode leftTreeNode) { this.leftTreeNode = leftTreeNode; } public TreeNode getRightTreeNode() { return rightTreeNode; } public void setRightTreeNode(TreeNode rightTreeNode) { this.rightTreeNode = rightTreeNode; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } public TreeNode(String value) { super(); this.value = value; } @Override public String toString() { return "TreeNode [leftTreeNode=" + leftTreeNode + ", rightTreeNode=" + rightTreeNode + ", value=" + value + "]"; } }
#实现插入、遍历
package com.drj.tree;
/**
*
- @ClassName: BinaryTree
- @Description:TODO(二叉树实现)
- @author: drj
- @date: 2018年8月22日 下午9:46:02
- @Copyright: 2018
*/
public class BinaryTree {
private TreeNode root;public TreeNode getRoot() { return root; } /** * 插入二叉树排序 有序插入 (大于根节点放右边 小于根节点放左边) * 暂时没有处理相同节点 正常严谨二叉树不能出现相同节点 * @param value */ public void insert(String value) { TreeNode newNode = new TreeNode(value); if (root == null) { root = newNode; root.setLeftTreeNode(null); root.setRightTreeNode(null); } else { TreeNode currentNode = root; TreeNode parentNode; // 有孩子继续循环,一直循环到最后一个节点 和插入的节点比较 大的放到右节点,小于放到左节点 while (true) { parentNode = currentNode; // 往右放 if (Integer.valueOf(newNode.getValue()) > Integer.valueOf(currentNode.getValue())) { currentNode = currentNode.getRightTreeNode(); if (currentNode == null) { parentNode.setRightTreeNode(newNode); return; } } else { // 往左放 currentNode = currentNode.getLeftTreeNode(); if (currentNode == null) { parentNode.setLeftTreeNode(newNode); return; } } } } } /** * 中序遍历 * * @param treeNode */ public void inOrder(TreeNode treeNode) { if (treeNode != null) { inOrder(treeNode.getLeftTreeNode()); System.out.print(" " + treeNode.getValue() + " "); inOrder(treeNode.getRightTreeNode()); } } /** * 后序遍历 * * @param treeNode */ public void afterOrder(TreeNode treeNode) { if (treeNode != null) { afterOrder(treeNode.getLeftTreeNode()); afterOrder(treeNode.getRightTreeNode()); System.out.print(" " + treeNode.getValue() + " "); } } /** * 先序遍历 * * @param treeNode */ public void beforeOrder(TreeNode treeNode) { if (treeNode != null) { System.out.print(" " + treeNode.getValue() + " "); beforeOrder(treeNode.getLeftTreeNode()); beforeOrder(treeNode.getRightTreeNode()); } } public static void main(String[] args) { BinaryTree tree = new BinaryTree(); tree.insert("5"); tree.insert("7"); tree.insert("4"); tree.insert("8"); tree.insert("6"); tree.insert("2"); tree.insert("3"); tree.insert("9"); System.out.println(tree.root); tree.beforeOrder(tree.getRoot()); System.out.println(); tree.inOrder(tree.getRoot()); System.out.println(); tree.afterOrder(tree.getRoot()); } }
#结果
#本测试二叉树